python案例单进程与多进程,传参

1.单进程

import time

def run1():
    print('我是run函数')
    # 当前代码阻塞在这了  卡在这了
    time.sleep(1000)

def run2():
    print('我是run函数')
    # 当前代码阻塞在这了  卡在这了
    time.sleep(1000)
run1()
run2()
print('我是下面的代码')

2.多进程

import time
from multiprocessing import Process

def run1():
    for i in range(500):
        print('我是run1函数')
        # 当前代码阻塞在这了  卡在这了
        time.sleep(1)

def run2():
    for i in range(500):
        print('我是run2函数')
        # 当前代码阻塞在这了  卡在这了
        time.sleep(1)

if __name__ == '__main__':
    t1 = time.time()
    p1 = Process(target=run1)  # 创建子进程p1
    p2 = Process(target=run2)  # 创建子进程p2
    p1.start()  # 开启p1子进程
    p2.start()  # 开启p2子进程
    p1.join()  # 阻塞等待 p1子进程执行完  主进程在等待子进程干活啊
    p2.join()  # 阻塞等待 p2 子进程执行完
    print('主进程')
    time.sleep(1000)
    print('我是下面的代码')
    print(time.time() - t1)

3、多进程传参

from multiprocessing import Process

# def run1(num, name):
def run1(num, name='lucky'):
    for i in range(num):
        print(f'我是{name}函数')
        # 当前代码阻塞在这了  卡在这了

if __name__ == '__main__':
    # 元祖的效率高于列表
    # 注意 传递参数args如果为一个值  则需给逗号,1为run1执行的次数
    Process(target=run1, args=(1,)).start()
    # Process(target=run1, args=[1]).start()
    # Process(target=run1, args=(1, )).start()
    # Process(target=run1, args=(1, 'lucky')).start()
    
    # 如果传递参数args为一个值,且没加逗号,将报下面错误
    # TypeError: 'int' object is not iterable

    # for i in 1:
    #     pass
    # TypeError: 'int' object is not iterable

4、多进程变量共享

"""
num = 1
def run1():
    # 声明num为全局变量
    global num
    num = 2  # 更改全局变量num的值为2
    print('我是run1函数', num)

run1()
print(num)
# 输出:我是run1函数 2
# 2
"""

List = []
def run1():
    List.append('luckyboy')
    print('我是run1函数', List)

run1()
print(List)
# 输出:我是run1函数 ['luckyboy']
# ['luckyboy']
from multiprocessing import Process

num = 1
def run1():
    # 声明num为全局变量
    global num
    num = 2  # 更改全局变量num的值为2
    print('我是run1函数', num)


if __name__ == '__main__':
    Process(target=run1).start()
    print('over')
    print(num)  # 1  进程间是独立的  每个进程有自己的独立存储

 5、进程通信队列

from multiprocessing import Process, Queue

def run(que):
    # 将数据放进队列中
    print('子进程放数据')
    que.put(1)
    que.put(2)
    que.put(3)

if __name__ == '__main__':
    # 创建队列对象
    que = Queue()
    # 这里传参args的参数que给run
    p = Process(target=run, args=(que, ))
    p.start()
    p.join()
    print('主进程获取数据', que.get())
    print('主进程获取数据', que.get())
    print('主进程获取数据', que.get())
    # 如果队列中没有数据了  会阻塞等待
    # print('主进程获取数据', que.get())
    # 如果在timeout时间内 还没有数据 跑出异常
    # print('主进程获取数据', que.get(timeout=3))
    
# 输出:子进程放数据
# 主进程获取数据 1
# 主进程获取数据 2
# 主进程获取数据 3

你可能感兴趣的:(python,案例,python,开发语言)