python多进程和多线程一起使用_Python 多进程和多线程

Python中的多进程

Process 逐个创建进程

使用multiprocessing中的Process,其中start()代表启动进程,join()代表等待进程结束再执行后面代码程序。

from multiprocessing import Process

from time import time,sleep

def func(arg):

time.sleep(6)

return arg

def main():

start = time()

p1 = Process(target=func,args=('123',))

p1.start()

p2 = Process(target=func,args=('456',))

p2.start()

p1.join()

p2.join()

end = time()

print('总共耗费了%.2f秒.' % (end - start))

if __name__ == '__main__':

main()

在创建进程时,子进程复制了父进程及其所有的数据结构,每个子进程有独立的内存空间,所以子进程间不共享变量。

Pool 创建指定数量的进程

Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。

使用multiprocessing中的Pool,其中imap()代表函数参数映射,join()代表等待进程结束再执行后面代码程序。

import time

from multiprocessing import Pool

def run(fn):

time.sleep(1)

print(fn * fn)

if __name__ == "__main__":

testFL = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 进程池数目

num_pools = 3

pool = Pool(num_pools)

# testFL:要处理的数据列表,run:处理testFL列表中数据的函数

pool.imap(run, testFL)

# pool.imap_unordered(run, testFL) 随机顺序

pool.close() # 关闭进程池,不再接受新的进程

pool.join() # 主进程阻塞等待子进程的退出

Python中的多线程

使用threading中的Thread线程,其中start()代表启动进程,join()代表等待线程结束再执行后面代码程序。

使用threading中的Lock锁,其中acquire()代表先获取锁才能执行后续,release()代表等待线程结束再执行后面代码程序。

# Python中的多线程

from threading import Thread,Lock

import time

class wallet:

def __init__(self,money):

self.money = money

self._lock = Lock()# 通过“锁”来保护“临界资源”

@property

def _money(self):

return self.money

def dp(self):

self._lock.acquire()

x = self.money - 1

time.sleep(0.01) # 延迟时间

self.money = x

self._lock.release()

class deposit(Thread):

def __init__(self,wt):

super().__init__()

self.wt = wt

def run(self):# 线程执行函数run

self.wt.dp()

def main():

wt = wallet(100)

threads = []

for i in range(100):

t = deposit(wt)

threads.append(t)

t.start()

for t in threads:

t.join()

print("balance: ",wt.money)

if __name__ == '__main__':

main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值