进程和并发
|
我们已经讲过了什么是线程,那今天就来学习一下什么是进程,进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 进程是正在运行的程序的实例,简单的说就是比如我们自己在python文件中写了一些代码,这叫做程序,而运行这个python文件的时候就叫做进程 什么是并发 那什么是并发呢,并发就是在某个时间段内,两件或两件以上的事件轮流交替使用某一资源,其目的是提高效率; 需要注意的是并发和并行的区别: multiprocess模块 Python中提供multiprocess模块实现多进程并发unix进程通信,我们来看一下multiprocess模块的使用,通过一个实例来对比多线程和多进程程序运行对CPU的使用情况 import multiprocessing
import threading
def worker():
number = 0
for i in range(10000000):
number += 1
print('循环次数:{} number:{}'.format(i+1, number))
if __name__ == '__main__':
for i in range(4):
# 创建线程
threading.Thread(target=worker, name='thread worker {}'.format(i)).start()
# 创建进程
multiprocessing.Process(target=worker, name='process worker {}'.format(i)).start()
分别启动线程和进程,运行代码,查看电脑的CPU的使用率,发现多进程占用内存多,切换复杂,CPU利用率低,多线程占用内存少,切换简单,CPU利用率高; 进程的一些对象方法 import multiprocessing
import threading
import time
def worker():
number = 0
for i in range(10000000):
number += 1
time.sleep(0.1)
print(multiprocessing.current_process().name) # 获取当前进程的名称
print('循环次数:{} number:{}'.format(i+1,number ))
if __name__ == '__main__':
for i in range(4):
process = multiprocessing.Process(target=worker, name='process worker {}'.format(i))
process.start()
print(process.pid) # 获取进程的pid
print(process.exitcode) # 获取退出状态码
print(process.name) # 获取进程名称
time.sleep(30)
print(process.terminate()) # 终止进程
进程并发:concurrent模块 from concurrent.futures import ProcessPoolExecutor import requests def fetch_url(url): result = requests.get(url=url, ) return result.text if __name__ == '__main__': # 创建10个线程队列的线程池 pool = ProcessPoolExecutor(10) # 获取任务返回对象 a = pool.submit(fetch_url, 'http://www.baidu.com') # 取出返回的结果 x = a.result() print(x)
也可以使用上下文管理的方式 from concurrent.futures import ProcessPoolExecutor import requests def fetch_url(url): result = requests.get(url=url, ) return result.text if __name__ == '__main__': with ProcessPoolExecutor(max_workers=10) as pool: a = pool.submit(fetch_url, 'http://www.9xkd.com') print(a.result())
守护进程实现(POSIX兼容) 守护进程实现的步骤: 对 os.fork( )的理解: import os
pid = os.fork()
print(pid)
if pid == 0:
print("我是子进程 pid={}, parent_pid={}".format(os.getpid(), os.getppid()))
else:
print("我是父进程 pid={}, parent_pid={}".format(os.getpid(), os.getppid()))
参考: (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |






