File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ #!/usr/bin/env python3
2+ # -*- coding: utf-8 -*-
3+
4+ '练习分布式进程'
5+
6+ __author__ = 'sergiojune'
7+ import queue , random
8+ from multiprocessing .managers import BaseManager
9+ # 此文件用来发送和接受结果,test36.py用于处理结果
10+
11+ # 创建通信工具
12+ # 发送任务
13+ post_task = queue .Queue ()
14+ # 接受结果
15+ result_task = queue .Queue ()
16+
17+
18+ class QueueManager (BaseManager ):
19+ pass
20+
21+
22+ # 定义的函数解决下面的坑
23+ def posttq ():
24+ return post_task
25+
26+
27+ def resulttq ():
28+ return result_task
29+
30+
31+ def start ():
32+ # 注册任务
33+ # 这里有个坑,在window系统下callable不能为匿名函数,原因是不能被序列化,所以在这里我们需要定义函数
34+ QueueManager .register ('post_task_queue' , callable = posttq ) # 第一个参数为注册名字
35+ QueueManager .register ('result_task_queue' , callable = resulttq )
36+
37+ # 绑定窗口,设置验证码
38+ manager = QueueManager (address = ('127.0.0.1' , 500 ), authkey = b'abc' ) # 第一个参数为地址和端口,第二个参数为验证码,防止别人骚扰
39+
40+ # 启动管理
41+ manager .start ()
42+ # 通过管理器获取通信
43+ post = manager .post_task_queue ()
44+ result = manager .result_task_queue ()
45+
46+ # 进行发送数据
47+ print ('try post data' )
48+ for x in range (10 ):
49+ n = random .randint (1 , 1000000 )
50+ print ('put %d' % n )
51+ post .put (n )
52+
53+ # 接受结果
54+ print ('try get result' )
55+ for x in range (10 ):
56+ # timeout表示超时获取数的最长时间
57+ value = result .get (timeout = 10 )
58+ print ('get result' , value )
59+
60+ # 关闭管理器
61+ manager .shutdown ()
62+ print ('master end' )
63+
64+
65+ if __name__ == '__main__' :
66+ start ()
You can’t perform that action at this time.
0 commit comments