多線程 VS 多進程(三)

      網友投稿 685 2025-04-02

      線程替代方案


      subprocess

      完全跳過線程,使用進程

      是派生進程的主要替代方案

      python2.4后引入

      multiprocessiong

      使用threading接口派生,使用子進程

      允許為多核或者多cpu派生進程,接口跟threading非常相似

      python2.6后引入

      concurrent.futures

      新的異步執行模塊

      任務級別的操作

      python3.2后引入

      多進程

      進程間通訊(InterprocessCommunication, IPC)

      進程之間無任何共享狀態

      進程的創建

      直接生成Process實例對象,案例19

      import multiprocessing from time import sleep, ctime def clock(interval): while True: print("The time is %s" % ctime()) sleep(interval) if __name__ == '__main__': p = multiprocessing.Process(target=clock, args=(5, )) p.start() while True: print("sleeping......") sleep(1)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      sleeping...... The time is Tue Aug 13 19:47:41 2019 sleeping...... sleeping...... sleeping...... sleeping...... sleeping...... The time is Tue Aug 13 19:47:46 2019 sleeping...... sleeping...... sleeping...... sleeping...... ...

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      多線程 VS 多進程(三)

      派生子類,案例20

      import multiprocessing from time import sleep, ctime class ClockProcess(multiprocessing.Process): ''' 兩個函數比較重要 1. init構造函數 2. run ''' def __init__(self, interval): super(ClockProcess, self).__init__() self.interval = interval def run(self): while True: print("The time is %s" % ctime()) sleep(self.interval) if __name__ == '__main__': p = ClockProcess(3) p.start()

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      The time is Tue Aug 13 19:48:49 2019 The time is Tue Aug 13 19:48:52 2019 The time is Tue Aug 13 19:48:55 2019 The time is Tue Aug 13 19:48:58 2019 The time is Tue Aug 13 19:49:01 2019 The time is Tue Aug 13 19:49:04 2019 ...

      1

      2

      3

      4

      5

      6

      7

      在os中查看pid,ppid以及他們的關系

      案例21

      from multiprocessing import Process import os def info(title): print(title) print("module name:", __name__) # 得到父親進程的id print("parent process:", os.getppid()) # 得到本身進程的id print("process id:", os.getpid()) def f(name): info('function f') print('hello', name) if __name__ == '__main__': info('main line') p = Process(target=f, args=('bob', )) p.start() p.join()

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      main line module name: __main__ parent process: 11900 process id: 18832 function f module name: __mp_main__ parent process: 18832 process id: 20868 hello bob

      1

      2

      3

      4

      5

      6

      7

      8

      9

      生產者消費者模型

      JoinableQueue

      案例22

      import multiprocessing from time import ctime def consumer(input_q): print("Into consumer:", ctime) while True: # 處理項 item = input_q.get() print('pull', item, 'out of q') input_q.task_done() # 發出信號通知任務完成 print("Out of consumer:", ctime()) ## 此句未執行,因為q.join()收集到四個task_done()信號后,主進程啟動,未等到print此句完成,程序就結束了 def producer(sequence, output_q): print("Into procuder:", ctime()) for item in sequence: output_q.put(item) print('put', item, 'into q') print('Out of procuder', ctime()) # 建立進程 if __name__ == '__main__': q = multiprocessing.JoinableQueue() # 進行消費者進程 cons_p = multiprocessing.Process(target=consumer, args=(q, )) cons_p.daemon = True cons_p.start() # 生產多個項,sequence代表要發送給消費者的項序列 # 在實踐中,這可能是生成器的輸出或通過一些其他地方生產出來 sequence = [1, 2, 3, 4] producer(sequence, q) # 等待所有項被處理 q.join()

      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

      26

      27

      28

      29

      30

      31

      32

      33

      Into procuder: Tue Aug 13 19:50:38 2019 put 1 into q put 2 into q put 3 into q put 4 into q Out of procuder Tue Aug 13 19:50:38 2019 Into consumer: pull 1 out of q pull 2 out of q pull 3 out of q pull 4 out of q

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      隊列中哨兵的使用,案例23

      import multiprocessing from time import ctime # 設置哨兵問題 def consumer(input_q): print("Into consumer:", ctime()) while True: item = input_q.get() if item is None: break print("pull", item, "out of q") print ("Out of consumer:", ctime()) ## 此句執行完成,再轉入主進程 def producer(sequence, output_q): print ("Into procuder:", ctime()) for item in sequence: output_q.put(item) print ("put", item, "into q") print ("Out of procuder:", ctime()) if __name__ == '__main__': q = multiprocessing.Queue() cons_p = multiprocessing.Process(target = consumer, args = (q,)) cons_p.start() sequence = [1,2,3,4] producer(sequence, q) q.put(None) cons_p.join()

      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

      26

      27

      28

      29

      30

      31

      Into procuder: Tue Aug 13 19:51:23 2019 put 1 into q put 2 into q put 3 into q put 4 into q Out of procuder: Tue Aug 13 19:51:23 2019 Into consumer: Tue Aug 13 19:51:24 2019 pull 1 out of q pull 2 out of q pull 3 out of q pull 4 out of q Out of consumer: Tue Aug 13 19:51:24 2019

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      哨兵的改進,案例24

      import multiprocessing from time import ctime def consumer(input_q): print ("Into consumer:", ctime()) while True: item = input_q.get() if item is None: break print("pull", item, "out of q") print ("Out of consumer:", ctime()) def producer(sequence, output_q): for item in sequence: print ("Into procuder:", ctime()) output_q.put(item) print ("Out of procuder:", ctime()) if __name__ == '__main__': q = multiprocessing.Queue() cons_p1 = multiprocessing.Process (target = consumer, args = (q,)) cons_p1.start() cons_p2 = multiprocessing.Process (target = consumer, args = (q,)) cons_p2.start() sequence = [1,2,3,4] producer(sequence, q) q.put(None) q.put(None) cons_p1.join() cons_p2.join()

      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

      26

      27

      28

      29

      30

      31

      32

      33

      34

      Into procuder: Tue Aug 13 19:52:08 2019 Out of procuder: Tue Aug 13 19:52:08 2019 Into procuder: Tue Aug 13 19:52:08 2019 Out of procuder: Tue Aug 13 19:52:08 2019 Into procuder: Tue Aug 13 19:52:08 2019 Out of procuder: Tue Aug 13 19:52:08 2019 Into procuder: Tue Aug 13 19:52:08 2019 Out of procuder: Tue Aug 13 19:52:08 2019 Into consumer: Tue Aug 13 19:52:08 2019 pull 1 out of q pull 2 out of q pull 3 out of q pull 4 out of q Out of consumer: Tue Aug 13 19:52:08 2019 Into consumer: Tue Aug 13 19:52:08 2019 Out of consumer: Tue Aug 13 19:52:08 2019

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      任務調度 多線程

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:邯鄲庫存進銷存管理軟件
      下一篇:凍結第三行和第三列要怎么操作?
      相關文章
      亚洲成av人片不卡无码久久| 亚洲男同帅GAY片在线观看| heyzo亚洲精品日韩| 亚洲av乱码一区二区三区香蕉| 久久亚洲精品中文字幕无码 | 人人狠狠综合久久亚洲高清| 亚洲精品乱码久久久久蜜桃 | 亚洲国产成人久久三区| 亚洲精品免费在线| 亚洲成无码人在线观看| 亚洲最大在线观看| 亚洲欧洲日本国产| 精品亚洲成在人线AV无码| 色在线亚洲视频www| 亚洲av无码专区在线| 久久亚洲精品专区蓝色区| 亚洲女人影院想要爱| 亚洲av无码一区二区三区天堂古代| 亚洲人成7777影视在线观看| 亚洲一区二区三区免费视频| 中文字幕亚洲精品无码| 亚洲成av人在线观看网站| 国产精品国产亚洲区艳妇糸列短篇 | 亚洲资源最新版在线观看| 中文字幕 亚洲 有码 在线| 亚洲精品无码久久久久秋霞| 怡红院亚洲红怡院在线观看| 亚洲精品成人区在线观看| 伊人久久精品亚洲午夜| 亚洲国产成人片在线观看| 亚洲一区二区三区电影| 亚洲成年人免费网站| 亚洲熟妇无码八V在线播放| 色天使色婷婷在线影院亚洲| 亚洲精品第一国产综合精品99| 亚洲午夜福利在线观看| 亚洲视频精品在线| 国产日本亚洲一区二区三区 | 亚洲AV日韩AV天堂久久 | 亚洲区日韩区无码区| 亚洲色大成网站www永久一区 |