首页 / PYTHON / python-进程与线程 二
python-进程与线程 二
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-进程与线程 二,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2983字,纯文字阅读大概需要5分钟。
内容图文
![python-进程与线程 二](/upload/InfoBanner/zyjiaocheng/940/02a2cac07b1443e398e095ae56c41a71.jpg)
一、在python中的一些进程相关的模块和包:
os.fork() (Linux) subprocess processing Multiprocessing
二、进程间的通信方式:
文件 管道(Pipes) Socket 信号 信号量 共享内存
三、代码
1)创建单进程
方式1:通过os.fork创建子进程(在Linux中执行) import os print("process no:", os.getpid()) # 主进程的PID pid = os.fork() # 创建一个子进程,在此句中有两个进程(只是这个方法返回0结果表示创建子进程成功了,所以0并不能代表子进程pid) # 主进程pid 和 子进程pid print(pid) # 主进程pid 子进程pid if pid == 0: print("I am child process (%s) and my parent is %s "(os.getpid(),os.getppid())) # os.getppid()打印父进程ID else: print("I (%s) just created a child process (%s). "(os.getpid(), pid)) print("*"*50) # 会被主进程打印一遍 # 结果是if 和 else都被执行了:子进程执行了if语句后面的内容,而主进程执行了else后面的内容
方式2:通过multiprocessing创建子进程 通过multiprocessing模块里面的process类创建子进程 参数说明 group:进程所属组,基本不用。 target:表示调用对象,一般为函数。 args:表示调用对象的位置参数元组。 name:进程别名。 kwargs:表示调用对象的字典。 import multiprocessing # 引入多进程的包 def do(n): # 任务函数 name = multiprocessing.current_process().name # 获取进程的名字 print(name, "starting") # 打印进程名字 print("worker", n) # 打印worker的字符串信息 return if __name__ == "__main__": numList = [] for i in range(5): p = multiprocessing.Process(name="test", target=do, args=(i,)) numList.append(p) p.start() # 启动执行新建进程的任务,进程会调用do函数来执行 p.join() # 等待当前进程执行完毕后,才会执行主进程后续代码 print("process end.") print(numList)
注意:
在Windows上要想使用进程模块,就必须把有关进程的代码卸载当前.py文件的if __name ==‘__main__’的语句下面,才能正常的使用Windous下的进程模块,Unix/Linux下则不需要
2)创建多进程
import multiprocessing import urllib.request import time def func1(url) : response = urllib.request.urlopen(url) html = response.read() print(html[0:20]) time.sleep(1) def func2(url): response = urllib.request.urlopen(url) html = response.read() print(html[0:20]) time.sleep(1) if __name__ == '__main__': p1 =multiprocessing.Process(target=func1, args=("http://www.sogou.com",),name="gloryroad1") p2 =multiprocessing.Process(target=func2, args=("http://www.baidu.com",),name="gloryroad2") p1.start() p2.start() p1.join() p2.join() time.sleep(1) print("done!")
3)创建进程池(进程池分两种:一种是同步进程池,一种是异步进程池)
# 同步进程池 import multiprocessing import time def m1(x): time.sleep(0.01) return x.x + x.y class a: # 把参数封装进类里面,然后传递对象 def __init__(self, x, y): self.x = x self.y = y if __name__ == '__main__': pool = multiprocessing.Pool(multiprocessing.cpu_count()) i_list = [a(i, i*10)for i in range(1000)] value = pool.map(m1, i_list) # 使用多进程的方式执行任务,当有多个参数的时候可以使用对象 print(value)
# 异步进程池 from multiprocessing import Pool def f(x): return x * x if __name__ == '__main__': pool = Pool(processes = 4) # 生成4个进程 result = pool.apply_async(f, [10]) # 异步执行 print(result.get(timeout=1)) print(pool.map(f, range(10))) # prints "[0, 1, 4,..., 81]"
内容总结
以上是互联网集市为您收集整理的python-进程与线程 二全部内容,希望文章能够帮你解决python-进程与线程 二所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。