python进程数上限_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如何控制进程或者线程的个数的详细内容,更多关于python 控制进程或线程的资料请关注脚本之家其它相关文章!
python进程数上限_python如何控制进程或者线程的个数相关推荐
- python进程数上限_python – 使用具有最大同时进程数的multipr...
使用multiprocessing.Pool可能是最明智的.Pool根据系统上可用的最大内核数量生成一个工作进程池,然后在内核可用时基本上提供任务. from multiprocessing impo ...
- python进程管理讲解_python之supervisor进程管理工具
[unix_http_server] file=/tmp/supervisor.sock ; socket文件的路径,supervisorctl用XML_RPC和supervisord通信就是通过它进 ...
- python 守护程序检测进程是否存在_python创建守护进程的疑问
我自己写了一个简易的下载和文件执行的客户端,如下 """ 省略若干代码 """ #执行下载函数 def do_script(): " ...
- .gpg 进程 linux,小知识之Linux系统中的最大进程数,最大文件描述,最大线程数...
今天来了解一下linux里面的一些小知识: (一)Linux系统中最大可以起多少个进程? (1)32位系统中最多可以起32768个进程 (2)64位系统中最多可以起2的22次方(4194304)约42 ...
- 怎样打开mysql进程数_mysql查看最大打开进程数
今天在群里刚刚知道这个查看打开最大进程数的命令,下面来看一下吧~ cat /proc/27095/limits | grep Max open files 查看mysql最大打开进程数的命令 我们应该 ...
- python进程数上限_python-使用multiprocessing.Process并发进程数最多
可能最明智的方法是使用multiprocessing.cpu_count(),它根据系统上可用的最大内核数生成一个工作进程池,然后基本上在内核可用时提供任务. 标准文档([http://docs.py ...
- python进程数上限_在多处理python中限制进程数
限制并发连接数的最简单方法是使用线程池:#!/usr/bin/env python from itertools import izip, repeat from multiprocessing.du ...
- python键盘控制程序延迟_python 实现控制鼠标键盘
1.安装类库 pip install pyautogui 2.代码: import pyautogui,time,random pyautogui.PAUSE = 3 pyautogui.FAILSA ...
- python两数求和_Python两数相加实现
题目要求: 思路: 遍历第一个与第二个链表,把相同位置的相加 设置一个flag,用来标记相加后大于10的部分,下一位再相加时,就要加上flag的值 遍历至一个链表结束 如果此时flag不为0,把未结束 ...
最新文章
- android studio 3.0设置字体
- es6学习笔记(一)
- Mybatis代码生成适配Oracle和Mysql数据库_01
- 格雷码、二进制码、BCD编码
- 瑞幸“踩”着星巴克登顶?
- 生成交叉表的简单通用存储过程
- 直击平昌!2天40位大咖的平昌区块链论坛精华都在这了!
- XSS挖漏洞 - CSS编码和反斜杠的三个技巧
- paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结
- nmake命令(windows下的makefile)
- 量子计算机王,王正汉|量子计算机:下一轮工业革命的引擎
- 系统时间与服务器时间同步出错,Win7电脑时间同步出错是怎么回事?系统时间同步失败如何解决?...
- 联盟营销最佳实践:提高联盟计划的投资回报率
- 取火柴 c语言程序,hdu 1907 John(取火柴游戏)
- dxdiag使用小结
- Linux du命令(du -h ,du -s)
- android 虚拟键 高度,Android获取虚拟按键的高度(适配全面屏)
- 【机器学习】生成模型与判别模型详解
- 群表示论之Able群的不可约表示
- 嵌入式linux下控制电机运动
热门文章
- msdn画圆弧函数_复变函数与积分变换 简明笔记(八):保形映射(共形映射)
- 【力扣网练习题】删除排序数组中的重复项
- Linux下查看Nginx,tomcat等的并发连接数和连接状态
- 剑指offer-----Python-----栈
- Android Studio 在项目中引用第三方jar包
- [Manthan, Codefest 18][Codeforces 1037E. Trips]
- Ubuntu dns
- 学习dubbo框架的问题
- 词法作用域和动态作用域
- 老李推荐:第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发 1...