这期内容当中小编将会给大家带来有关python中怎么控制进程或线程的个数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
如下例demo所示, 创建了一个大小是4的进程池,然后创建5个进程,并启动
from multiprocessing import Pool
import os, time, random
def long_time_task(name):
print('Run task %s (%s)...' % (name, os.getpid()))
start = time.time()
time.sleep(random.random() * 3)
end = time.time()
print('Task %s runs %0.2f seconds.' % (name, (end - start)))
if __name__ == '__main__':
print('Parent process %s.' % os.getpid())
p = Pool(4)
for i in range(5):
p.apply_async(long_time_task, args=(i,))
print('Waiting for all subprocesses done...')
p.close()
p.join()
print('All subprocesses done.')
运行结果如下,可以看到第5个进程会等池子里的进程完成一个后才会被启动
Run task 0 (32952)...
Run task 1 (32951)...
Run task 2 (32953)...
Run task 3 (32954)...
Task 2 runs 0.68 seconds.
Run task 4 (32953)...
Task 1 runs 1.41 seconds.
Task 0 runs 1.44 seconds.
Task 4 runs 2.15 seconds.
Task 3 runs 2.98 seconds.
All subprocesses done.
queue 模块即队列,特别适合处理信息在多个线程间安全交换的多线程程序中。 下面的demo展示了如何通过queue来限制线程的并发个数
import threading
import queue
import time
import random
import os
maxThreads = 4
class Store(threading.Thread):
def __init__(self, q):
threading.Thread.__init__(self)
self.queue = q
# self.store = store
def run(self):
try:
print('Run task (%s)...' % (os.getpid()))
start = time.time()
time.sleep(random.random() * 3)
end = time.time()
t = threading.currentThread()
# 线程ID
print('Thread id : %d' % t.ident)
print('Thread name : %s' % t.getName())
print('Task runs %0.2f seconds.' % (end - start))
except Exception as e:
print(e)
finally:
self.queue.get()
self.queue.task_done()
def main():
q = queue.Queue(maxThreads)
for s in range(6):
q.put(s)
t = Store(q)
t.start()
q.join()
print('over')
if __name__ == '__main__':
main()
运行结果如下:
Run task (33259)...
Run task (33259)...
Run task (33259)...
Run task (33259)...
Thread id : 123145444999168
Thread name : Thread-13
Task runs 0.04 seconds.
Run task (33259)...
Thread id : 123145394630656
Thread name : Thread-10
Task runs 1.02 seconds.
Run task (33259)...
Thread id : 123145428209664
Thread name : Thread-12
Task runs 1.20 seconds.
Thread id : 123145394630656
Thread name : Thread-17
Task runs 0.68 seconds.
Thread id : 123145444999168
Thread name : Thread-14
Task runs 1.79 seconds.
Thread id : 123145411420160
Thread name : Thread-11
Task runs 2.96 seconds.
over
上述就是小编为大家分享的python中怎么控制进程或线程的个数了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/csp277/blog/4675902