加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

进程和并发

发布时间:2022-11-10 12:56:59 所属栏目:Unix 来源:
导读:  我们已经讲过了什么是线程,那今天就来学习一下什么是进程,进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

  进程是正在
  我们已经讲过了什么是线程,那今天就来学习一下什么是进程,进程(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()
  进程与进程的通信机制_unix进程通信_实现进程到进程之间的通信
 
  分别启动线程和进程,运行代码,查看电脑的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()) # 终止进程
  实现进程到进程之间的通信_unix进程通信_进程与进程的通信机制
 
  进程并发: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)
  实现进程到进程之间的通信_unix进程通信_进程与进程的通信机制
 
  也可以使用上下文管理的方式
 
  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())
  实现进程到进程之间的通信_进程与进程的通信机制_unix进程通信
 
  守护进程实现(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()))
 

(编辑:PHP编程网 - 钦州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章