创建进程的两种方式 进程对象及其他方法 守护进程 进程间数据是隔离的 join方法

创建进程的两种方式   

# 创建进程的第一种方法
from multiprocessing import Process
import time

def test(name):
    print('%s is running'% name)
    time.sleep(3)
    print('%s is over' %name)
# window创建进程会将代码以模块的方式  从上往下执行一遍
# linux会直接将代码完完整整的拷贝一份

# windows创建进程一定要在if __name__ == '__main__': 代码块内创建  否则报错

if __name__ == '__main__':
    p = Process(target=test,args=('james',))
    p.start()
    print('主程序')

'''
创建进程就是在内从中重新开辟一块内存空间
将允许产生的代码块丢进去
一个进程对应在内存就是一块独立的空间

进程与进程之间的数据是隔离的  无法直接交互
但是可以通过某些技术实现间接交互
'''

# 创建进程的第二种方式
from multiprocessing import Process
import time

class MyProcess(Process):
    def __init__(self,name):
        super().__init__()
        self.name = name

    def run(self):
        print('%s is running' %self.name)
        time.sleep(3)
        print('%s is over' %self.name)

if __name__ == '__main__':
    p = MyProcess('james')
    p.start()
    print('主程序')

进程对象及其他方法 

from multiprocessing import Process
import os
import time

def test(name):
    print('%s is running'% name ,'子进程%s'%os.getpid(),'父进程%s'%os.getppid())
    time.sleep(3)
    print('%s is over'%name)

if __name__ == '__main__':
    p = Process(target=test,args=('james',))
    p.start()
    p.terminate()
    time.sleep(0.1)
    print(p.is_alive())

    print('主程序',os.getpid(),'主主进程%s'%os.getppid())

守护进程   

from multiprocessing import Process
import time

def test(name):
    print('%s还正常活着'%name)
    time.sleep(3)
    print('%s 这个人没了,说没就没了'%name)

if __name__ == '__main__':
    p = Process(target=test,args=('james',))
    p.daemon = True
    p.start()
    time.sleep(0.1)
    print('这小子终于死了')

join方法  

from multiprocessing import Process
import time

def test(name,i):
    print('%s is running'%name)
    time.sleep(i)
    print('%s is over'%name)


if __name__ == '__main__':
    p_list = []

    p = Process(target=test,args=('james,1'))
    p1 = Process(target=test,args=('koby,1'))
    p2 = Process(target=test,args=('love,1'))
    start_time = time.time()
    p.start()
    p1.start()
    p2.start()

    p.join()
    p1.join()
    p2.join()


# 主程代码等待子进程运行结束  才继续进行
# p.join()   # 主进程代码等待子进程运行结束
    print('主程序')
    print(time.time()-start_time)

进程间数据是隔离的   

from multiprocessing import Process
import time


money = 100

def test():
    global money
    money = 99999999


if __name__ == '__main__':
    p = Process(target=test)
    p.start()
    p.join()
    print(money)

互斥锁


传建一个文件 data
文件内容
{"ticket": 5}



from
multiprocessing import Process,Lock import time import json #查票 def search(i): with open('data','r',encoding='utf-8') as f: data = f.read() t_d = json.loads(data) print('用户%s查询余票为%s'%(i,t_d.get('ticket'))) # 买票 def buy(i): with open('data','r',encoding='utf-8') as f: data = f.read() t_d = json.loads(data) time.sleep(1) if t_d.get('ticket') > 0: # 票数减一 t_d['ticket'] -= 1 # 更新票数 with open('data','w',encoding='utf-8') as f: json.dump(t_d,f) print('用户%s抢票成功'%i) else: print('没票了') def run(i,mutex): search(i) mutex.acquire() # 抢锁 buy(i) mutex.release() # 释放锁 if __name__ == '__main__': mutex = Lock() for i in range(10): p = Process(target=run,args=(i,mutex)) p.start()

 

原文地址:https://www.cnblogs.com/xuzhaolong/p/11340789.html