温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python中怎么控制进程或线程的个数

发布时间:2021-08-03 15:25:15 来源:亿速云 阅读:451 作者:Leah 栏目:编程语言

这期内容当中小编将会给大家带来有关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

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中怎么控制进程或线程的个数了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI