【Python】多进程的传参,全局变量使用,数据共享通信

1.关于进程里的传参

import multiprocessing#导入进程模块
def card():
    print("word:%s,name:%s,age:%d"%word,name,age)
if __name__=="__main__":
    process=multiprocessing.Process(target=card,args=("你好",),kwargs={"name":wu,"age"=18})#arges要是一个元祖形式
    process.daemon=True
    #守护进程:如果没有daemon的话,一般的主进程结束的时候子进程是不会结束的它还会继续执行,所以我们需要在主进程结束的时候让子进程也立即停止。
    #这个属性为一个布尔值,表示是否为一个守护进程,且这个属性设置必须在线程的start方法开始之前调用。它的值继承自主线程,主线程的daemon为False且所有从主线程创建的线程都是daemon = False。
    process.start()
    process.close()

2.关于多进程任务

import multiprocessing
import os
def text():
    for i in range(5):
        print("text",i)
        print("当前进程",multiprocessing.current_process().pid)
        print("父进程编号",os.getppid)
if __name__=="__main__":
    process=multiprocessing.Process(target=text)
    process.start()
    print("当前运行进程",os.getpid)

执行以上进程可以清楚的观察到各进程运行的顺序。

3.关于进程里的全局变量

import multiprocessing
import time
list1=[]  #list1是一个全局变量
def write():
    for i in range(5):
        list1.append(i)
        time.sleep(1)
def read():
    print(list1)
if __name__=="__main__":
    t1=multiprocessing.Process(target=write)
    t2=multiprocessing.Process(target=read)
    t1.start()
    t1.join   #让t1运行完在运行t2
    t2.start()

执行上述进程可以看到t1列表中有值,而t2列表还是一个空值列表,所以由此可见在不同的进程中它们是不共享全局变量的,只有在线程中才共享全局变量

4.多进程通信

可以参考https://blog.csdn.net/u013066730/article/details/105821979

# -*- coding:utf-8 -*-
from multiprocessing import Process, Manager
import time
import random
def kkk(a_list, number):
  for i in range(10):
    a_list.append(np.array([i]))
    time.sleep(random.randrange(2))
    print('这是进程{} {}'.format(number, a_list))
  print('这是进程{} {}'.format(number, a_list))
def jjj(a_list):
  for i in range(2):
    process = Process(target=kkk, args=(a_list, i))
    process.start()
if __name__ == '__main__':
  manager = Manager()
  a_list = manager.list()
  # a_list = []
  process_0 = Process(target=jjj, args=(a_list,))
  process_0.start()
  process_0.join()
  print(a_list)
  print(len(a_list))
  print('it\'s ok')

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值