python 学习-进程
进程与线程
进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ
线程,能够完成多任务,比如 一个QQ中的多个聊天窗口
进程的状态
python 进程创建
import multiprocessing
import time
import os
num=0
def run_proc():
global num
while True:
print("------2-----")
print('⼦进程运⾏中,pid=%d...' % os.getpid())
num+=1
print(num)
time.sleep(1)
if __name__ == '__main__':
p=multiprocessing.Process(target=run_proc)
print("P start")
p.start()
while True:
print('父进程运⾏中,pid=%d...' % os.getpid())
print(num)
time.sleep(1)
运行结果
子进程中的全局变量会新开一个,不会影响父线程的变量,如果需要影响,则需要进行进程之间的通信
进程间的通信
Queue的使用
import multiprocessing
q=multiprocessing.Queue(10)
q.put("消息1")
q.put("消息2")
print(q.full())
q.put("消息3")
print(q.full())
try:
q.put("消息4",True,1)
except Exception as e:
print("消息列队已满,现有消息数量:%s"%q.qsize())
else:
print(q.get())
if not q.full():
q.put_nowait("消息5")
print("消息列队现有消息数量:%s"%q.qsize())
print(q.get())
Queue的读写数据
import multiprocessing
import os
import time
import random
def write(q):
for v in ['A','B','C','D','E','F','G']:
print("put %s"%v)
q.put(v)
time.sleep(random.random())
def read(q):
while True:
if not q.empty():
v=q.get()
print("get %s"%v)
time.sleep(random.random())
def main():
q=multiprocessing.Queue()
pw=multiprocessing.Process(target=write,args=(q,))
pr=multiprocessing.Process(target=read,args=(q,))
pw.start()
pr.start()
print("over")
if __name__=='__main__':
main()