进程的创建模块--multipocessing
进程的相关方法
函数名 |
介绍 |
参数 |
返回值 |
Process |
创建一个进程 |
target,args |
进程对象 |
start |
执行进程 |
无 |
无 |
join |
阻塞进程 |
无 |
无 |
kill |
杀死进程 |
无 |
无 |
is_alive |
进程是否存活 |
无 |
bool |
# 示例
import multiprocessing
import time
def a_start():
for i in range(10):
print(i)
time.sleep(1)
def b_start():
for i in range(10):
print(i)
time.sleep(1)
if __name__ == ‘__main__‘:
a_p = multiprocessing.Process(target=a_start)
b_p = multiprocessing.Process(target=b_start)
for p in (a_p, b_p):
p.start()
for p in (a_p, b_p):
p.join()
进程池与进程锁
进程在创建和关闭的过程中会消耗资源,
进程池中的进程创建后不会被关闭,避免了创建与关闭的消耗
进程池的相关方法
函数名 |
介绍 |
参数 |
返回值 |
Pool |
进程池创建 |
Processcount |
进程池对象 |
apply_async |
任务加入进程池(异步) |
func,args |
无 |
close |
关闭进程池 |
无 |
无 |
join |
等待进程池任务结束 |
无 |
无 |
进程锁的加锁与解锁
from multiprocessing import Manager()
manage = Manager()
lock = manage.Lock()
函数名 |
介绍 |
acquire |
上锁 |
release |
开锁(解锁) |
进程中的通信
进程通过队列进行信息的传递,队列的创建方法如下表格
函数名 |
介绍 |
参数 |
返回值 |
Queue |
队列的创建 |
mac_cout |
队列对象 |
put |
信息放入队列 |
message |
无 |
get |
获取队列信息 |
无 |
str |
线程方法 terminate可以终止队列传输
# 进程通信实例:
# coding:utf-8
import time
import multiprocessing
import json
class Work():
def __init__(self, q):
self.q = q # 接收队列,实例化队列
def send(self, message):
# 如果接收的message不是字符串,则进行格式化
if not isinstance(message, str):
result = json.dumps(message)
self.q.put(result)
def send_all_p(self):
for i in range(20):
self.q.put(‘当前发送的数字:%s‘%i)
time.sleep(1)
def get_mes(self):
while True:
‘‘‘一直获取程序发送的信息‘‘‘
res = self.q.get()
try:
result = json.loads(res)
except:
result = res
print(result)
if __name__ == ‘__main__‘:
p = multiprocessing.Queue()
work = Work(p)
send = multiprocessing.Process(target=work.send, args=({‘名字‘:‘程昱延‘},))
gt = multiprocessing.Process(target=work.get_mes)
send_all = multiprocessing.Process(target=work.send_all_p)
send.start()
send_all.start()
gt.start()
send_all.join()
gt.terminate() # 终止队列传输
线程模块--threading
线程的创建
方法名 |
说明 |
举例 |
Thread |
创建线程 |
Thread(target, args) |
线程对象的方法
方法名 |
说明 |
用法 |
start |
启动线程 |
stat() |
join |
阻塞直到线程执行结束 |
join(timeout=None) |
getName |
获取线程的名字 |
getName() |
setName |
设置线程的名字 |
setName() |
is_alive |
判断线程是否存活 |
is_alive() |
setDaemon |
守护线程 |
setDaemon(True) |
线程池--concurrent
方法名 |
说明 |
举例 |
futures.ThreadPoolExecutor |
创建线程池 |
ThreadPoolExecutor(max_workers) |
线程池对象的方法
方法名 |
说明 |
用法 |
submit |
往线程池中加入任务 |
submit(target,args) |
done |
线程池中的某个线程是否完成了任务 |
done() |
result |
获取当前线程执行任务的结果 |
result() |
异步与多线程多进程
- 轻量级的线程 (协程)
- 可以获取异步函数的返回值
- 主进程需要异步才行
- 更适合文件读写使用
async与await关键字
asyncio调用async函数
函数 |
介绍 |
参数 |
返回值 |
gather |
将异步函数批量执行 |
asyncfunc... |
List 函数的返回结果 |
run |
执行主异步函数 |
[task] |
执行函数的返回结果 |
import asyncio
import random
async def a():
for i in range(5):
print(i, ‘a‘)
await asyncio.sleep(random.random() * 2)
return ‘a‘
async def b():
for i in range(5):
print(i, ‘b‘)
await asyncio.sleep(random.random() * 2)
return ‘b‘
async def main():
result = await asyncio.gather(
a(),
b()
)
print(result)
if __name__ == ‘__main__‘:
asyncio.run(main())
第三方模块gevent
安装方式
pip install gevent
# windows 可能需要安装:
Microsoft Visual C++
# linux 可能需要安装
pip install wheel
gevent模块常用方法
函数名 |
介绍 |
参数 |
返回值 |
spawn |
创建协程对象 |
Func,args |
协程对象 |
joinall |
批量处理协程对象 |
[spawnobj] |
[spawnobj] |
多线程多进程和异步
原文:https://www.cnblogs.com/C-yuyan/p/14401070.html