Python 线程,python的线程和进程

  Python 线程,python的线程和进程

  

  Python 线程与进程

  线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

  使用 threading 模块

  方法一:

  导入线程

  进口时间

  deffoo(n):

  打印( foo%s%n )

  时间。睡眠(1)

  打印(“endfoo”)

  defbar(n):

  打印(条形% s“% n”)

  时间。睡眠(2)

  打印("结束条")

  t1=线程。线程(target=foo,args=(1,))

  t2=线程。线程(target=bar,args=(2,))

  t1.start()

  t2.start()

  打印(."在曼哈顿.")运行结果:

  foo1

  bar2

  .因瑟梅因..

  恩德福

  端杆方法二:

  导入时间,线程

  classMyThread(线程。螺纹):

  def__init__(self,num):

  threading.Thread.__init__(self)

  自我编号=数字

  defrun(self):#定义线程要运行的函数

  打印( runningonnumber: % s % self.num )

  时间。睡眠(3)

  if__name__==__main__:

  t1=MyThread(1)

  t2=MyThread(2)

  t1.start()

  t2.start()运行结果:

  运行号码:1

  runningonnumber:2join方法使得主线程等待子线程完成才继续

  导入线程

  进口时间

  begin=time.time()

  deffoo(n):

  打印( foo%s%n )

  时间。睡眠(1)

  print('endfoo')

  defbar(n):

  print('bar%s'%n)

  time.sleep(2)

  print('endbar')

  t1=threading.Thread(target=foo,args=(1,))

  t2=threading.Thread(target=bar,args=(2,))

  t1.start()

  t2.start()

  t1.join()

  t2.join()

  print('........inthemain..........')运行结果:

  

foo1

  bar2

  endfoo

  endbar

  ........inthemain..........

相关推荐:《Python视频教程》

  在计算密集型任务中串行与多线程进行对比

  

importthreading,time

  begin=time.time()

  defadd(n):

  sum=0

  foriinrange(n):

  sum+=i

  print(sum)

  add(100000000)

  add(200000000)

  end=time.time()

  print(end-begin)

运行结果:

  

4999999950000000

  19999999900000000

  17.66856598854065

importthreading,time

  begin=time.time()

  defadd(n):

  sum=0

  foriinrange(n):

  sum+=i

  print(sum)

  t1=threading.Thread(target=add,args=(100000000,))

  t1.start()

  t2=threading.Thread(target=add,args=(200000000,))

  t2.start()

  t1.join()

  t2.join()

  end=time.time()

  print(end-begin)

运行结果:

  

4999999950000000

  19999999900000000

  21.088160276412964

  #结果为串行运行比多线程运行更快

Cpython 中有 GIL (Global Interpreter Lock,全局解释器锁),所以在同一时刻,只能有一个线程进入调度。如果任务是IO密集型的,可以使用多线程;如果任务是计算密集型的,最优方法是改成 C。

  setDaemon()

  调用该方法只要是主线程完成,不管子线程是否完成都要和主线程一起退出。

  threading.currentThread()

  返回当前的线程变量。

  threading.active_count()

  返回正在运行的线程数量。

  

importthreading,time

  fromtimeimportctime,sleep

  defmusic(func):

  print(threading.current_thread())

  foriinrange(2):

  print("Beginlisteningto%s.%s"%(func,ctime()))

  sleep(2)

  print("endlistening%s"%ctime())

  defmovie(func):

  print(threading.current_thread())

  foriinrange(2):

  print("Beginwatchingatthe%s%s"%{func,ctime()})

  sleep(4)

  print("endwatching%s"%ctime())

  threads=[]

  t1=threading.Thread(target=music,args=('klvchen',))

  threads.append(t1)

  t2=threading.Thread(target=movie,args=('lili',))

  threads.append(t2)

  if__name__=='__main__':

  fortinthreads:

  t.setDaemon(True)

  t.start()

  print(threading.current_thread())

  print(threading.active_count())

  print("allover%s"%ctime())

运行结果:

  

<Thread(Thread-1,starteddaemon5856)>

  Beginlisteningtoklvchen.WedJul1123:43:512018

  <Thread(Thread-2,starteddaemon9124)>

  <_MainThread(MainThread,started9444)>

  3

  alloverWedJul1123:43:512018

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: