国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python多進程multiprocessing用法實例分析

2020-02-16 02:05:44
字體:
來源:轉載
供稿:網友

本文實例講述了Python多進程multiprocessing用法。分享給大家供大家參考,具體如下:

mutilprocess簡介

像線程一樣管理進程,這個是mutilprocess的核心,他與threading很是相像,對多核CPU的利用率會比threading好的多。

簡單的創建進程:

import multiprocessingdef worker(num):  """thread worker function"""  print 'Worker:', num  returnif __name__ == '__main__':  jobs = []  for i in range(5):    p = multiprocessing.Process(target=worker, args=(i,))    jobs.append(p)    p.start()

確定當前的進程,即是給進程命名,方便標識區分,跟蹤

import multiprocessingimport timedef worker():  name = multiprocessing.current_process().name  print name, 'Starting'  time.sleep(2)  print name, 'Exiting'def my_service():  name = multiprocessing.current_process().name  print name, 'Starting'  time.sleep(3)  print name, 'Exiting'if __name__ == '__main__':  service = multiprocessing.Process(name='my_service',                   target=my_service)  worker_1 = multiprocessing.Process(name='worker 1',                    target=worker)  worker_2 = multiprocessing.Process(target=worker) # default name  worker_1.start()  worker_2.start()  service.start()

守護進程就是不阻擋主程序退出,自己干自己的 mutilprocess.setDaemon(True)就這句等待守護進程退出,要加上join,join可以傳入浮點數值,等待n久就不等了

守護進程:

import multiprocessingimport timeimport sysdef daemon():  name = multiprocessing.current_process().name  print 'Starting:', name  time.sleep(2)  print 'Exiting :', namedef non_daemon():  name = multiprocessing.current_process().name  print 'Starting:', name  print 'Exiting :', nameif __name__ == '__main__':  d = multiprocessing.Process(name='daemon',                target=daemon)  d.daemon = True  n = multiprocessing.Process(name='non-daemon',                target=non_daemon)  n.daemon = False  d.start()  n.start()  d.join(1)  print 'd.is_alive()', d.is_alive()  n.join()

最好使用 poison pill,強制的使用terminate()注意 terminate之后要join,使其可以更新狀態

終止進程:

import multiprocessingimport timedef slow_worker():  print 'Starting worker'  time.sleep(0.1)  print 'Finished worker'if __name__ == '__main__':  p = multiprocessing.Process(target=slow_worker)  print 'BEFORE:', p, p.is_alive()  p.start()  print 'DURING:', p, p.is_alive()  p.terminate()  print 'TERMINATED:', p, p.is_alive()  p.join()  print 'JOINED:', p, p.is_alive()

①. == 0 未生成任何錯誤 
②. 0 進程有一個錯誤,并以該錯誤碼退出
③. < 0 進程由一個-1 * exitcode信號結束

進程的退出狀態:

import multiprocessingimport sysimport timedef exit_error():  sys.exit(1)def exit_ok():  returndef return_value():  return 1def raises():  raise RuntimeError('There was an error!')def terminated():  time.sleep(3)if __name__ == '__main__':  jobs = []  for f in [exit_error, exit_ok, return_value, raises, terminated]:    print 'Starting process for', f.func_name    j = multiprocessing.Process(target=f, name=f.func_name)    jobs.append(j)    j.start()  jobs[-1].terminate()  for j in jobs:    j.join()    print '%15s.exitcode = %s' % (j.name, j.exitcode)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南陵县| 沿河| 霸州市| 平阴县| 浏阳市| 陆良县| 鲁甸县| 新平| 遂宁市| 莱西市| 五指山市| 白朗县| 屏东市| 沈丘县| 关岭| 伊宁市| 绵竹市| 临高县| 思茅市| 枣阳市| 台南市| 衡水市| 庆云县| 青浦区| 平度市| 贵溪市| 图木舒克市| 武夷山市| 苏尼特右旗| 阿鲁科尔沁旗| 名山县| 临高县| 乐山市| 玉山县| 大荔县| 京山县| 和硕县| 庆安县| 旺苍县| 洛阳市| 米泉市|