首页 > 代码库 > Python之多线程

Python之多线程

   

一、多线程

1、顺序执行单个线程,注意要顺序执行的话,需要用join。

 1 #coding=utf-8
 2 
 3 from threading import Thread
 4 import time
 5 
 6 def my_counter():
 7     i = 0
 8     for _ in range(100000000):
 9         i = i + 1
10     return True
11 
12 def main():
13     thread_array = {}
14     start_time = time.time()
15     for tid in range(2):
16         t = Thread(target=my_counter)
17         t.start()
18         # join阻塞下个线程,除非当前线程执行完毕
19         t.join()
20     end_time = time.time()
21     print("Total time: {}".format(end_time - start_time))
22 
23 if __name__ == __main__:

 执行结果: 

技术分享

 

2、同时执行两个并发线程

 1 #coding=utf-8
 2 
 3 from threading import Thread
 4 import time
 5 
 6 def prn_obj(obj):
 7     return \n.join([%s:%s % item for item in obj.__dict__.items()])
 8 
 9 def my_counter():
10     i = 0
11     for _ in range(100000000):
12         i = i + 1
13     return True
14 
15 def main():
16     thread_array = {}
17     start_time = time.time()
18     for tid in range(2):
19         t = Thread(target=my_counter)
20         t.start()
21         thread_array[tid] = t
22     for i in range(2):
23         thread_array[i].join()
24         # print("thread type: {}".format(prn_obj(thread_array[i])))
25         print("thread type: {}".format(thread_array[i].name))
26     end_time = time.time()
27     print("Total time: {}".format(end_time - start_time))
28 
29 if __name__ == __main__:
30     main()

下面是用了打印所有属性的方法,这个方法代码中注释了,可重复利用的代码块

技术分享

 

二、多进程

1、multiprocessing

multiprocessing是跨平台版本的多进程模块,它提供了一个Process类来代表一个进程对象,下面是示例嗲吗

import os
if __name__==__main__: 
    print Process (%s) start... % os.getpid()
    pid = os.fork()
    print pid
    if pid==0:
            print I am child process (%s) and my parent is %s. % (os.getpid(), os.getppid())
    else:
            print I (%s) just created a child process (%s). % (os.getpid(), pid)

这个程序如果用单进程写则需要执行10秒以上的时间,而用多进程则启动10个进程并行执行,只需要用1秒多的时间。

 

Python之多线程