以后在写一些Python并发的时候参考下面这个模块,小西总结的挺全的,直接搬砖了。

进程并发

from multiprocessing import Pool, Manager
def func(d, results):
res = d + 1
print(res)
results.append(res) if __name__ == "__main__":
num = 5
data = range(40)
print(data)
pool = Pool(processes=num)
manager = Manager()
results = manager.list()
jobs = []
for d in data:
job = pool.apply_async(func, (d, results))
jobs.append(job)
pool.close()
pool.join()
print(results)
from multiprocessing import Pool, Manager def func(d, results):
res = d + 1
print(res)
results.append(res) if __name__ == "__main__":
num = 5
data = range(40)
print(data)
pool = Pool(processes=num)
manager = Manager()
results = manager.list()
jobs = []
for d in data:
job = pool.apply_async(func, (d, results))
jobs.append(job)
pool.close()
pool.join()
print(results)

线程并发

from multiprocessing.pool import ThreadPool

def func(d):
res = d + 1
print(res)
return res def ThreadPools():
num = 5
data = range(40)
print(data)
jobs = []
results = []
pool = ThreadPool(num)
for d in data:
job = pool.apply_async(func, (d,))
jobs.append(job)
pool.close()
pool.join()
for i in jobs:
results.append(i.get())
print(results) if __name__ == '__main__':
ThreadPools()

协程并发

python3版本利用gevent库

import gevent
from gevent import monkey, pool; monkey.patch_all()
from gevent import Timeout def func(d):
res = d + 1
print(res)
return res def GeventPools():
num = 8
data = range(40)
print(data)
results = []
p = pool.Pool(num)
timer = Timeout(60 * 1200).start() # Execute up to 120 minutes per coroutine
jobs = []
for d in data:
job = p.spawn(func, d)
jobs.append(job)
try:
gevent.joinall(jobs) # wait all jobs done
except Timeout:
print("[-] Time out....")
except Exception as e:
print("[-] error:{}".format(e))
finally:
pass
for i in jobs:
results.append(i.get())
print(results) if __name__=='__main__':
GeventPools()

python3版本利用asyncpool库

import asyncio
import asyncpool
import logging
import functools def func(d):
res = d + 1
print(res)
return res def asyncmul():
async def worker_coro(data, result_queue):
# print("Processing Value! -> {}".format(data))
results = await loop.run_in_executor(None, functools.partial(func, data))
await result_queue.put(results) async def result_reader(queue):
while True:
value = await queue.get()
if value is None:
break
results.append(value)
# print("Got value! -> {}".format(value)) async def run():
result_queue = asyncio.Queue()
reader_future = asyncio.ensure_future(result_reader(result_queue), loop=loop)
# Start a worker pool with 10 coroutines, invokes `example_coro` and waits for it to complete or 5 minutes to pass.
async with asyncpool.AsyncPool(loop, num_workers=num, name="WorkerPool",
logger=logging.getLogger("WorkerPool"),
worker_co=worker_coro, max_task_time=5 * 60,
log_every_n=10) as pool:
for d in data:
await pool.push(d, result_queue) await result_queue.put(None)
await reader_future num = 8
data = range(40)
print(data)
results = []
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
print(results) asyncmul()

python常用正则:

import re
html='aa11bb22cc'
pattern=re.compile(r'aa(.+?)b')
print pattern.findall(html)
import re
html='aa11bb22cc'
print re.findall(r'aa(.+?)b',html)

requests的session会话对象来进行处理。会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie

import  requests

def login():
'''登录接口:/auth/login'''
s=requests.Session()
r=s.post(
url='http://11X.39.63.XX:20080/auth/login',
data={'username':'system','password':'123456'})
return s def selectable():
r=login().get(
url='http://11X.39.63.XX:20080/depot/parks/selectable')
print r.status_code
print r.text selectable()

上传图片

import requests
upload_url="http://baidu.com"
header={"ct":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"}
proxies={"http":"http://127.0.0.1:8082"}
files = {'file':('hh.jpg',open('hh.jpg','rb'),'image/jpeg')}
upload_data={"parentId":"","fileCategory":"personal","fileSize":179,"fileName":"summer_text_0920.txt","uoType":1}
upload_res=requests.post(url=upload_url,data=upload_data,files=files,headers=header,proxies=proxies)

进程+线程并发,进程+协程并发参考下面链接,先留个坑,以后用的时候遇到问题再来改

http://momomoxiaoxi.com/python/2019/03/12/python/

Python各类并发模版的更多相关文章

  1. Python多进程并发(multiprocessing)用法实例详解

    http://www.jb51.net/article/67116.htm 本文实例讲述了Python多进程并发(multiprocessing)用法.分享给大家供大家参考.具体分析如下: 由于Pyt ...

  2. python多进程并发和多线程并发和协程

    为什么需要并发编程? 如果程序中包含I/O操作,程序会有很高的延迟,CPU会处于等待状态,这样会浪费系统资源,浪费时间 1.Python的并发编程分为多进程并发和多线程并发 多进程并发:运行多个独立的 ...

  3. Python 3 并发编程多进程之进程同步(锁)

    Python 3 并发编程多进程之进程同步(锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,竞争带来的结果就是错乱,如何控制,就是加锁处理. 1. ...

  4. Python 3 并发编程多进程之守护进程

    Python 3 并发编程多进程之守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemo ...

  5. Python 3 并发编程多进程之队列(推荐使用)

    Python 3 并发编程多进程之队列(推荐使用) 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 可以往 ...

  6. python实现并发服务器实现方式(多线程/多进程/select/epoll)

    python实现并发服务器实现方式(多线程/多进程/select/epoll)   并发服务器开发 并发服务器开发,使得一个服务器可以近乎同一时刻为多个客户端提供服务.实现并发的方式有多种,下面以多进 ...

  7. python 网络并发 :理论部分

    1.今日内容大纲 进程的介绍(理论部分) 进程的创建以及分析 获取进程的pid 进程之间的隔离 1.进程的介绍(理论部分) 1.1什么是进程 一个正在被cpu执行的程序就是一个进程,一个程序可以开启多 ...

  8. Python多线程并发的误区

    由于项目要做一个并发测试,由于断言的东西较多,决定手写脚本.于是用python写了脚本: def test_method(thread_no): print("%s===test_metho ...

  9. 《Python》并发编程

    手工操作 —— 穿孔卡片 1946年第一台计算机诞生--20世纪50年代中期,计算机工作还在采用手工操作方式.此时还没有操作系统的概念.     程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输 ...

随机推荐

  1. 【Java基础】7、Java同步机制之Monitor监视器与syncrhoized实现原理

    一:Monitor Monitor是一个同步工具,相当于操作系统中的互斥量(mutex),即值为1的信号量. 它内置与每一个Object对象中,相当于一个许可证.拿到许可证即可以进行操作,没有拿到则需 ...

  2. MySQL5.7 常用用户操作

    目录 MySQL5.7 常用用户操作 1. 新建用户 2. 授权 3. 创建用户时授权 4. 设置与更改用户密码(root) 5. 撤销用户权限 6. 删除用户 7. 查看用户的授权 8. 显示当前用 ...

  3. nginx多站点配置

    一.安装nginx https://yq.aliyun.com/articles/101144?spm=5176.10695662.1996646101.searchclickresult.70af9 ...

  4. Spring boot实现自定义拦截器

    Sprintboot的拦截器提供了精细的控制:在request被响应之前.request被响应之后.request全部结束之后至视图渲染之前 三个时间点,我们都可以通过编写他们的函数来控制. 首先新建 ...

  5. TCP连接与OKHTTP复用连接池

    Android网络编程(八)源码解析OkHttp后篇[复用连接池] 1.引子 在了解OkHttp的复用连接池之前,我们首先要了解几个概念. TCP三次握手 通常我们进行HTTP连接网络的时候我们会进行 ...

  6. 前端SEO

    一.搜索引擎工作原理 当我们在输入框中输入关键词,点击搜索或查询时,然后得到结果.深究其背后的故事,搜索引擎做了很多事情. 在搜索引擎网站,比如百度,在其后台有一个非常庞大的数据库,里面存储了海量的关 ...

  7. 将caj文件转化为pdf文件进行全文下载脚本(ubuntu下亲测有用)

    最近ubuntu下caj阅读器,突然崩掉了,而偏偏要准备开题,在网上搜索原因未果,准备放弃时候,突然在网上看到一个脚本,说是很好用,可以在指定页面将caj文件转化为pdf文件,亲测有用,这里直接给出脚 ...

  8. AsyncTask 处理耗时操作&&显示进度条

    在Android中实现异步任务机制有两种,Handler和AsyncTask.优缺点自己百度,推荐使用AsyncTask. private ProgressDialog dialog; //新建一个对 ...

  9. Express4.X中的bin/www是作什么用的?为什么没有后缀?

    使用Express4.X的同学会发现,相比Express3.X初始化项目时多了一个bin目录,并且下面还有一个www文件,那么它们有什么用呢? 在Express 3.x中集成了很多中间件,www和ap ...

  10. 记一款bug管理系统(bugdone.cn)的开发过程(4) - 新增BugTalk功能

    测试人员提出一个Bug,如果开发人员对Bug有疑义,会直接面对面讨论或者通过QQ等线上聊天工具讨论,但过后再去找讨论记录会很麻烦.因此BugDone提出一个全新的概念:将问题的讨论留在问题内.BugD ...