一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - python實(shí)現(xiàn)線程池的方法

python實(shí)現(xiàn)線程池的方法

2020-07-18 11:09liujian0616 Python

這篇文章主要介紹了python實(shí)現(xiàn)線程池的方法,實(shí)例分析了Python線程池的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了python實(shí)現(xiàn)線程池的方法。分享給大家供大家參考。具體如下:

原理:建立一個(gè)任務(wù)隊(duì)列,然多個(gè)線程都從這個(gè)任務(wù)隊(duì)列中取出任務(wù)然后執(zhí)行,當(dāng)然任務(wù)隊(duì)列要加鎖,詳細(xì)請看代碼

文件名:thrd_pool.py 系統(tǒng)環(huán)境:ubuntu linux & python2.6

?
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import threading
import time
import signal
import os
class task_info(object):
  def __init__(self):
    self.func = None
    self.parm0 = None
    self.parm1 = None
    self.parm2 = None
class task_list(object):
  def __init__(self):
    self.tl = []
    self.mutex = threading.Lock()
    self.sem = threading.Semaphore(0)
  def append(self, ti):
    self.mutex.acquire()
    self.tl.append(ti)
    self.mutex.release()
    self.sem.release()
  def fetch(self):
    self.sem.acquire()
    self.mutex.acquire()
    ti = self.tl.pop(0)   
    self.mutex.release()
    return ti
class thrd(threading.Thread):
  def __init__(self, tl):
    threading.Thread.__init__(self)
    self.tl = tl
  def run(self):
    while True:
      tsk = self.tl.fetch()
      tsk.func(tsk.parm0, tsk.parm1, tsk.parm2) 
class thrd_pool(object):
  def __init__(self, thd_count, tl):
    self.thds = []
    for i in range(thd_count):
      self.thds.append(thrd(tl))
  def run(self):
    for thd in self.thds:
      thd.start()
def func(parm0=None, parm1=None, parm2=None):
  print 'count:%s, thrd_name:%s'%(str(parm0), threading.currentThread().getName())
def cleanup(signo, stkframe):
  print ('Oops! Got signal %s', signo) 
  os._exit(0)
if __name__ == '__main__':
  signal.signal(signal.SIGINT, cleanup)
  signal.signal(signal.SIGQUIT, cleanup)
  signal.signal(signal.SIGTERM, cleanup)
  tl = task_list()
  tp = thrd_pool(6, tl)
  tp.run()
  count = 0
  while True:
    ti = task_info()
    ti.parm0 = count
    ti.func = func
    tl.append(ti)
    count += 1
    time.sleep(2)
  pass

執(zhí)行方式:python thrd_pool.py

執(zhí)行結(jié)果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
count:0, thrd_name:Thread-1
count:1, thrd_name:Thread-2
count:2, thrd_name:Thread-3
count:3, thrd_name:Thread-4
count:4, thrd_name:Thread-5
count:5, thrd_name:Thread-1
count:6, thrd_name:Thread-6
count:7, thrd_name:Thread-2
count:8, thrd_name:Thread-3
count:9, thrd_name:Thread-4
count:10, thrd_name:Thread-5
count:11, thrd_name:Thread-1
count:12, thrd_name:Thread-6
count:13, thrd_name:Thread-2
count:14, thrd_name:Thread-3
('Oops! Got signal %s', 15)

希望本文所述對大家的Python程序設(shè)計(jì)有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国内外精品免费视频 | 色欧美亚洲 | 国产成人亚洲精品91专区高清 | 亚洲AV午夜精品麻豆AV | 99久久综合 | 激情亚洲天堂 | 男人曰女人 | 教师系列 大桥未久在线 | 近亲乱中文字幕 | 亚洲高清一区二区三区久久 | 色哟哟精品 | 狠狠色成人综合 | 国产视频中文字幕 | 久久精品动漫99精品动漫 | 久久噜国产精品拍拍拍拍 | 丝瓜草莓香蕉绿巨人幸福宝 | 亚洲同性男男gay1069 | 亚洲精品久久啪啪网站成年 | 99福利视频导航 | 射逼网 | 欧美xxxxx九色视频免费观看 | a级片在线观看免费 | 天天碰夜夜操 | 日本艳鉧动漫1~6在线观看 | 日本xxxxx69hd日本 | 精品国产一区二区三区久久久蜜臀 | 亚洲伦理影院 | 九九精品免视频国产成人 | 日韩免费观看成第15集 | 晓雪老师我要进你里面好爽 | 亚洲国产欧美久久香综合 | 国产精品青青青高清在线密亚 | 石原莉奈adn093店长未婚妻 | 欧洲美女女同 | 911香蕉视频 | 美女bbxx美女bbb | 果冻传媒九一制片厂 | 国语自产拍在线观看7m | 亚洲色图中文字幕 | 福利国产精品 | 亚洲男人天堂2023 |