一、课程代码
1.from celery import Celery broker = "redis://192.168.48.136:6379/5" backend = "redis://192.168.48.136:6379/6" app = Celery("ajing", broker=broker, backend=backend) @app.task def add(x, y): time.sleep(5) return x+y2.
def produce(q): print("start produce") for i in range(10): q.put(i) print("produce has produced value {0}".format(i)) time.sleep(0.3) print("end produce") def custome(q): print("start custorme") while 1: data = q.get() print("custormer has get value {0}".format(data)) if __name__ == '__main__': q = Queue() p = Thread(target=produce, args=(q,)) c = Thread(target=custome, args=(q, )) p.start() c.start()
# Pipe
3.def proc1(pipe):
for i in range(10): print("send {0}".format(i)) pipe.send(i) time.sleep(0.1) def proc2(pipe): n = 10 while n: print("proc2 recv: {0}".format(pipe.recv())) n -= 1 if __name__ == '__main__': (p1, p2) = multiprocessing.Pipe(duplex=False) pr = Process(target=proc1, args=(p2,)) cu = Process(target=proc2, args=(p1,)) pr.start() cu.start()
二、小结
Pipe的方法返回一个tuple (conn1, conn2) Pipe方法还有一个参数duplex参数,如果deplex=True,叫双工模式 如果deplex=False conn1只负责接受, conn2只负责发消息 发消息: send 收消息: recv 关闭管道: close
from Queue import Queue q = Queue() q.qsize() #返回当前队列的空间 q.empty() #判断当前队列是否为空 q.full() #判断当前队列是否满 q.put() #放消息 q.get() #获取消息 q.task_done() #接受消息的线程调用该函数来说明消息对应的任务是否已经完成 q.join() #等待队列为空,在执行别的操作