python-进程

python-进程

一、进程

from multiprocessing import Process
process = Process(target = 函数,name = 进程的名字,args = (给函数传递的参数))

对象调用方法:

  • proce.start() —> 启动进程并执行任务
  • process.run() —> 只是执行了任务但是没有启动进程
  • terminate() —> 终止
进程池
Pool = Pool(max)
创建进程池对象
1、非阻塞式

全部添加到队列中,立刻返回

pool.apply_async() ----> 非阻塞的
pool.close()
pool.join() ----> 让主进程让步

举例

from multiprocessing import Pool
import time
from random import random
import os
def task(task_name):
    print('开始做任务:',task_name)
    start = time.time()
    time.sleep(random()*2)
    end = time.time()
    print('完成任务',task_name,'用时:',(end - start),'任务进程id:',os.getid())
container = []
def callback_func():
    print(n)
if __name__=='__main__':
    pool = Pool(5)
    tasks = ['听音乐','吃饭','洗衣服','打游戏','散步','看孩子','做饭']
    for task1 in tasks:
        pool.apply_async(task,args=(task1,),callback=callback_func)
    pool.close()
    pool.join()
    print('over!')
2、阻塞式

添加一个执行一个任务,如果一个任务不结束,另一个任务就进不来

pool.apply() ----> 阻塞的

线程

1、 创建线程

法一:

t = Thread(target = func,name = '',args = (),kwargs = {})
t.start() ----> 就绪状态
run()
join()

法二: 自定义线程

class MyThread(Thread):
    def __init__(self,name):
        super().__init__()
        self.name = name
    def run(self):
        任务
t = MyThread('name')
t.start()
2、数据共享

进程共享数据与线程共享数据区别:

  1. 进程是每个进程中都有一份
  2. 线程是共同一个数据 ----> 数据安全性问题
lock  = Lock()
lock.acqure()
......
lock.release()
----> 只要用锁:死锁(避免)
3、进程间通信:生产者与消费者

生产者:线程
消费者:线程

import queue
from multiprocessing import put
q = queue.Queue()
----> 创建生产者
th = threading.Thread(target = produce,args = (q,))
th.start()
----> 创建消费者
tc = threading.Thread(target = consume,args = (q,))
tc.start()
q.put()
q.get()


q = Queue(5)
q.put('A')
put()如果queue满了则只能等待,除非有“空地”则添加成功
if not q.full():
    q.put('F',timeout=3)
else:
    print('队列已满!')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值