Discuss / Python / 有几个需要注意的点

有几个需要注意的点

Topic source

即墨城风

#1 Created at ... [Delete] [Delete and Lock User]

1、windows运行需要把匿名函数替换为自定义的函数 2、Queue.Empty 在python3 上是queue.Empty 3、我在windows powershell上运行服务端有提示关于freeze_support的错误,尝试在代码前面加入该判断后可以解决: if name == 'main: 下面贴代码: server.py

import random, time, queue from multiprocessing.managers import BaseManager

task_queue = queue.Queue() result_queue = queue.Queue()

def ret_task_queue(): global task_queue return task_queue

def ret_result_queue(): global result_queue return result_queue

class QueueManager(BaseManager): pass

if name == 'main': QueueManager.register('get_task_queue', callable=ret_task_queue) QueueManager.register('get_result_queue', callable=ret_result_queue)

manager = QueueManager(address=('127.0.0.1', 5000), authkey=b'abc')
manager.start()

task = manager.get_task_queue()
result = manager.get_result_queue()

for i  in range(10):
    n = random.randint(0, 1000)
    print('Put task %d' % n)
    task.put(n)

print('Try to get results...')

for i in range(0, 10):
    n = result.get(timeout=10)
    print('Result is %s' % n)

manager.shutdown()
print('master exit')

worker.py

import time, sys, queue from multiprocessing.managers import BaseManager

class QueueManager(BaseManager): pass

QueueManager.register('get_task_queue') QueueManager.register('get_result_queue')

server_addr = '127.0.0.1' print('connect to server %s' % server_addr)

m = QueueManager(address=(server_addr, 5000), authkey=b'abc') m.connect()

task = m.get_task_queue() result = m.get_result_queue()

for i in range(10): try: n = task.get(timeout=1) print('run task %d %d...' % (n, n)) r = '%d %d = %d' % (n, n, n*n) time.sleep(1) result.put(r) except queue.Empty: print('Queue is empty')

print('worker exit')

baosuxin

#2 Created at ... [Delete] [Delete and Lock User]

请教一下,我也遇到了freeze_support()的问题,按你的方法加了 if name == 'main:后没有效果,应该怎么解决

IT李老板

#3 Created at ... [Delete] [Delete and Lock User]

是 if name == 'main'

IT李老板

#4 Created at ... [Delete] [Delete and Lock User]

下划线显示不出来

 前几楼好搞笑,哈哈
 我来试试
  if   __name__=='__main__'
  哈哈为啥我可以

我来试试看 if __name__ == '__main__' 原来要在_前面加上\

再补充一点: 4.对于windows系统,在task_master.py里绑定端口和设置验证码那一句要指明IP地址哦,也即改成: manager = QueueManager(address=('127.0.0.1', 5000), authkey=b'zzj')


  • 1

Reply