multiprocessing模块

# multiprocessing多元的处理进程的模块
from multiprocessing import Process
# from multiprocessing import  process
import os
def func():#
    print(os.getpid(), os.getppid())  # pid process id   ppid parent process id
if __name__ == '__main__':
    print('main', os.getpid(), os.getppid())
    p = Process(target=func)
    p.start()  # 开启了一个子进程
# # multiprocessing多元的处理进程的模块
# from multiprocessing import Process
# # from multiprocessing import  process
# import os
#
#
# def func(name, age):  #
#     print(os.getpid(), os.getppid(), name, age)  # pid process id   ppid parent process id
#
#
# # print(123)
# if __name__ == '__main__':
#     print('main', os.getpid(), os.getppid())
#     p = Process(target=func, args=('alex', 18))
#     p.start()  # 开启了一个子进程

为什么要用if name == ‘main
进程之间所有的内存是隔离的
能不能给子进程传递参数
可以
能不能获取子进程的返回值
不能
#能不能同时开启多个子进程
可以

```python
from multiprocessing import Process
# from multiprocessing import  process
import os
import time


def func(name, age):  #
    print('%s start' % name)
    time.sleep(1)
    print(os.getpid(), os.getppid(), name, age)  # pid process id   ppid parent process id


# print(123)
if __name__ == '__main__':
    print('main', os.getpid(), os.getppid())
    arg_lst = [('alex', 84), ('tom', 84), ('jane', 18)]
    # 并发异步
    p = Process(target=func, args=('alex', 18))
    for arg in arg_lst:
        p = Process(target=func, args=arg)
        p.start()  # 开启了一个子进程 #异步非阻塞,不等待start结果,继续向下执行
    # print('hhh')
    # p = Process(target=func, args=('jane', 18))
    # p.start()  # 开启了一个子进程
    # p = Process(target=func, args=('tom', 18))
    # p.start()  # 开启了一个子进程



#join的用法
import os
import time
from multiprocessing import Process
def func(name, age):
    print('send one email to %s age %s\n' % (age, name))
    time.sleep(1)
    print('send over')
    # print(os.getpid(), os.getppid(), name, age)


if __name__ == '__main__':
    # print('main', os.getpid(), os.getppid())
    arg_lst = [('jane', 18), ('tom', 45), ('erhe', 67)]
    p_lst=[]
    for arg in arg_lst:
        p = Process(target=func, args=arg)
        p.start()
        p_lst.append(p)
    for p in p_lst:
        p.join()
    print('所有的邮件已经发送完毕')
# 异步非阻塞
# 同步阻塞:join
##非阻塞:start
 #进程之间的数据是隔离的
 from multiprocessing import Process
n=0
def func():
    global n
    n=n+1

if __name__=='__main__':
    p_lst=[]
    for i in range(100):
        p=Process(target=func)
        p.start()
        p_lst.append(p)
    for p in p_lst:p.join()
    print(n)

在使用多进程实现一个并发的socket的server
server.py

import socket
from multiprocessing import Process


def talk(conn):
    while True:
        msg = conn.recv(1024).decode('utf-8')
        ret = msg.upper().encode('utf-8')
        conn.send(ret)
    conn.close()


if __name__ == '__main__':
    sk = socket.socket()
    sk.bind(('127.0.0.1', 9003))
    sk.listen()
    while True:
        conn, addr = sk.accept()
        Process(target=talk, args=(conn,)).start()
    sk.close()

client.py

import socket
import time

sk=socket.socket()
sk.connect(('127.0.0.1',9003))
while True:
    sk.send(b'hello')
    msg=sk.recv(1024).decode('utf-8')
    print(msg)
    time.sleep(0.5)
sk.close()

开启进程的另一种方式用类开启

import os
from multiprocessing import Process
import time


class MyProcess(Process):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c
        super().__init__()

    def run(self):
        time.sleep(1)
        print(os.getppid(), os.getpid(),self.a,self.b,self.c)


if __name__ == '__main__':
    print('-->', os.getpid())
    for i in range(10):
        p = MyProcess(1,2,3)
        p.start()

Pocess中的其他方法

import os
from multiprocessing import Process
import time

class MyProcess(Process):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c
        super().__init__()

    def run(self):
        time.sleep(1)
        print(os.getppid(), os.getpid(), self.a, self.b, self.c)


if __name__ == '__main__':
    print('-->', os.getpid())
    p = MyProcess(1, 2, 3)
    p.start()
    print(p.pid)
    print(p.name)
    print(p.ident)
    print(p.is_alive())
    p.terminate()  # 强制结束一个子进程,异步非阻塞
    time.sleep(0.01)
    print(p.is_alive())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值