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,把未结束 ...
最新文章
- httpWebRequest 错误
- vue html绑定数组,VueJs Class 与 Style 绑定 数组语法
- 国防科大提出基于可变形三维卷积的视频超分辨,代码已开源
- 详解优酷视频质量评价体系
- Windows Sysinternals Desktops v1.0 发布 - 超简单的虚拟桌面程序
- C 语言 printf 输出详解
- [Linux]使用宝塔面板做负载均衡时遇到的问题和解决办法
- 0.618 与 1.414
- 【Elasticsearch教程20】Pinyin拼音分词器 以及多音字修改
- 985硕士美女程序媛:10次面试的真实经历!阿里/携程/美团/58/华为....
- GPT磁盘如何正确分区以及UEFI引导怎么修复?
- git学习之时光穿梭机
- html ul实现手机页面,手机端网页banner实现
- PowerShell的基本使用方法
- 一些英文词的标准缩写
- 从智慧交通、智慧安防、智能电网的应用来看我国智慧城市建设现状
- C++ Reference: Standard C++ Library reference: C Library: cmath: erfc
- 华为AP4050DN-HD使用tftp、uboot瘦转胖
- 卸载symantec AntiVirus Client客户端,要求输入密码。。。。
- python 财务报表 建模_Python进行统计建模
热门文章
- extjs2.0 ie8 下拉树_extjs自定义下拉树
- PCL点云特征描述与提取(2)
- 【飘移】仅需7个动作完成“斯堪的纳维亚钟摆”飘移过弯教程
- 面试前赶紧看了5道Python Web面试题,Python面试题No17
- Python-接口自动化(二)
- this.$router.push、replace、go的区别
- 7 个 jQuery 最佳实践
- 如果asp.net mvc中某个action被执行了两次,请检查是不是以下的原因
- Android提示框与通知的使用
- winsock select