mutilprocessing
1、启动一个进程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#encoding:utf8 import os import time from multiprocessing import Process __author__ = 'quanjie' def run_proc(name): time.sleep(3) print('Child process %s(%s) Running ...'%(name,os.getpid())) if __name__ == '__main__': print('Parent process %s.'%os.getpid()) p = Process(target=run_proc,args=("multiprocessing",))#************ print('Process will start.') p.start() p.join()#**************** print('Process end.') |
a、Process(函数名,参数),参数以元组的形式给出。
b、p.join()等待子进程运行完了,父进程才继续向下运行。
2、启动多个进程
(1)、不使用pool
1 2 3 4 5 6 7 8 9 10 11 12 13 |
def run_proc(name): time.sleep(3) print('Child process %s(%s) Running ...'%(name,os.getpid())) if __name__ == '__main__': print('Parent process %s.'%os.getpid()) for i in range(5): p = Process(target=run_proc,args=(str(i),)) print('Process will start.') p.start() p.join() print('Process end.') |
结果:
1 2 3 4 5 6 7 8 9 10 11 12 |
Parent process 6428. Process will start. Process will start. Process will start. Process will start. Process will start. Child process 0(6429) Running ... Child process 1(6430) Running ... Child process 2(6431) Running ... Child process 3(6432) Running ... Child process 4(6433) Running ... Process end. |
(2)、使用pool来管理和启动线程
1 2 3 4 5 6 7 8 9 10 |
if __name__ == '__main__': print('Parent process %s.'%os.getpid()) p = Pool(processes=3) for i in range(5): p.apply_async(run_proc,args=(str(i),)) p.close() p.join() print('All subprocesses done.') |
结果:
1 2 3 4 5 6 7 |
Parent process 6549. Child process 0(6550) Running ... Child process 1(6551) Running ... Child process 2(6552) Running ... Child process 3(6550) Running ... Child process 4(6551) Running ... All subprocesses done. |
threading
(1)、创建一个线程(函数)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#encoding:utf8 __author__ = 'quanjie' import random import threading import time def thread_run(urls): print('Current %s is running...' % threading.current_thread().getName()) for url in urls: print('%s ------>> %s'%(threading.current_thread().name,url)) time.sleep(random.random()) print('%s ended'%threading.current_thread().name) if __name__ == '__main__': print('%s is running......'% threading.current_thread().name) print(threading.current_thread().getName()) print() t1 = threading.Thread(target=thread_run,name='Thread_1',args=(['url_1','url_2','url_3'],)) t2 = threading.Thread(target=thread_run,name='Thread_2',args=(['url_4','url_5','url_6'],)) t1.start() t2.start() t1.join() t2.join() print('%s ended.'%threading.current_thread().name) |
结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
MainThread is running...... MainThread Current Thread_1 is running... Thread_1 ------>> url_1 Current Thread_2 is running... Thread_2 ------>> url_4 Thread_2 ------>> url_5 Thread_1 ------>> url_2 Thread_2 ------>> url_6 Thread_2 ended Thread_1 ------>> url_3 Thread_1 ended MainThread ended. |
a、threading.current_thread().getName()和threading.current_thread().name同样的作用。
b、t.join()的作用是等待当前线程执行完了,才往下执行。
(2)、创建一个线程(类)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class myThread(threading.Thread): def __init__(self,name,urls): threading.Thread.__init__(self,name=name)#********参数self,不能少 self.urls = urls def run(self): print('Current %s is running...' % threading.current_thread().getName()) for url in self.urls: print('%s ------>> %s'%(threading.current_thread().name,url)) time.sleep(random.random()) print('%s ended'%threading.current_thread().name) if __name__ == '__main__': print('%s is running......'% threading.current_thread().name) print(threading.current_thread().getName()) print() t1 = myThread(name='Thread_1',urls =['url_1','url_2','url_3']) t2 = myThread('Thread_2',['url_4','url_5','url_6']) t1.start() t2.start() print('%s ended.'%threading.current_thread().name) |
结果(这是没有join的结果):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
MainThread is running...... MainThread Current Thread_1 is running... Thread_1 ------>> url_1 Current Thread_2 is running... MainThread ended. Thread_2 ------>> url_4 Thread_2 ------>> url_5 Thread_1 ------>> url_2 Thread_2 ------>> url_6 Thread_2 ended Thread_1 ------>> url_3 Thread_1 ended |
- 我的微信
- 这是我的微信扫一扫
-
- 我的微信公众号
- 我的微信公众号扫一扫
-