码迷,mamicode.com
首页 > 编程语言 > 详细

多进程、多线程在不同环境下的操作

时间:2018-03-23 12:59:40      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:png   for   open   vip   ssi   ctime   产生   ali   ted   

多进程、多线程在不同环境下的操作

多进程:Linux创建进程是操作系统把父进程的东西拷贝到子进程

    Windows创建进程类似于模块导入

  Linux环境下开启多进程,可以用os里的fork

 1 import os
 2 import time
 3 pid = os.fork()
 4 
 5 if pid == 0:  # 子进程永远返回0
 6     print(子进程{},父进程{}.format(os.getpid(), os.getppid()))
 7 else:  # 父进程返回的是子进程的id;os.getpid()获取子进程id,os.getppid()获取父进程id
 8     print(父进程开始等待子进程运行结束,子进程id:,pid)
 9 time.sleep(10)
10 运行结果:
11 ssh://pyvip@127.0.0.1:1234/usr/bin/python3 -u /home/pyvip/tz_spider/os_test.py
12 父进程开始等待子进程运行结束,子进程id: 1812
13 子进程1812,父进程1811

  windows环境下开启多进程,注意要写  if __name__ == ‘__main__‘: 不然会一直创建子进程

 1 import multiprocessing
 2 import time
 3 print(mainprocess start, time.asctime(time.localtime(time.time())), multiprocessing.current_process())
 4 def func():
 5     print(subprocess start:, time.asctime(time.localtime(time.time())))
 6     time.sleep(5)
 7     print(subprocess end:, time.asctime(time.localtime(time.time())))
 8 if __name__ == __main__:
 9     #  is_alive  判断进程实例是否还在运行
10     #  terminate  结束进程 p.terminate ; p.join()主进程会等子进程执行完再执行
11     p = multiprocessing.Process(target=func)
12     p.start()
13     time.sleep(5)
14     print(mainprocess end, time.asctime(time.localtime(time.time())))
15 运行结果:
16 E:\python3.63\python.exe E:/tz_spider/os_test.py
17 mainprocess start Fri Mar 23 11:02:11 2018 <_MainProcess(MainProcess, started)>
18 mainprocess start Fri Mar 23 11:02:12 2018 <_MainProcess(Process-1, started)>
19 subprocess start: Fri Mar 23 11:02:12 2018
20 mainprocess end Fri Mar 23 11:02:16 2018
21 subprocess end: Fri Mar 23 11:02:17 2018

  从17、18行代码可以发现 mainprocess start 打印了两次,这是因为子进程会复制该程序运行,但是 if __name__

== ‘__main__‘: 只有主进程才会执行,这是 if __name__ == ‘__main__‘: 的特性!在本文件里 __name__ == ‘__main__‘

但是在‘复制‘的文件里它会变成被‘复制‘文件的名字。这里相当于是在其他py文件里导入模块。如果在Linux里执行,这段

代码18行将不会执行!

 

守护进程:

  p = multiprocessing.Process(target=func)

  p.deamon = True

  上面的代码会让主进程直接执行,不等待子进程,主进程结束子进程也就结束了;p.join()起到一个阻塞的作用,主进

程要等子进程结束再执行!

 

面向对象化的多进程:

 

 1 import multiprocessing
 2 import time
 3 
 4 
 5 class ClockProcess(multiprocessing.Process):
 6 
 7     def __init__(self):
 8         super().__init__()
 9 
10     def run(self):
11         time.sleep(3)
12         n = 5
13         while n > 0:
14             print(the time is {}.format(time.time()))
15             n -= 1
16 
17 
18 if __name__ == __main__:
19     for i in range(5):
20         p = ClockProcess()
21         p.start()

  在Windows和Linux下都会下产生6个进程,一个主进程,5个子进程!注意程序里面如果有 input() ,子程序如果也要执

行这个的话就会报错 !可以导入os,sys 模块,写一行 sys.stdin = os.fdopen(0)

  技术分享图片

 

 多线程:

 

多进程、多线程在不同环境下的操作

标签:png   for   open   vip   ssi   ctime   产生   ali   ted   

原文地址:https://www.cnblogs.com/dan-baishucaizi/p/8629503.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!