【发布时间】:2019-01-09 13:30:02
【问题描述】:
我是编写并发代码的初学者。
我正在编写一个获取用户 ID 并尝试返回用户全名的代码,查询需要一秒钟左右的时间来执行,所以我希望涉及多处理以更快地收集数据;我想我已经接近了,但我不明白框架需要如何正确实现。
from subprocess import getoutput
from multiprocessing import Pool
all_users = ['User1', 'User2', 'User3', 'User4', 'User5', 'User6'] # example list
def get_name(userid):
name = getoutput('net users {} /domain | findstr "full name:"'.format(userid)).replace('Full Name', '').strip().split('\n')[0]
return {userid : name}
if __name__ == '__main__':
with Pool(4) as p:
print(p.map(get_name, all_users))
print(' --------- finished')
print(' - exiting - '))
这只是多步骤脚本中的一个步骤;输出如下:(忽略“找不到用户名”部分,仅举例)
- exiting -
- exiting -
- exiting -
- exiting -
[{'User1': 'The user name could not be found.'}, {'User2': 'The user name could not be found.'}, {'User3': 'The user name could not be found.'}, {'User4': 'The user name could not be found.'}, {'User5': 'The user name could not be found.'}, {'User6': 'The user name could not be found.'}]
--------- finished
- exiting -
我正在尝试按如下方式构建程序:
- 获取用户列表
- 将 ID 转换为名称(尽快为每个函数调用生成一个单独的进程)
- 等待第二步完全完成,然后处理返回的数据;
我尝试从各种来源阅读该主题,但我无法以某种方式掌握结构......据我所知,由于我有 4 个核心,我在开始时收到了四个 - 退出 - 语句,但是我如何封装这部分代码,以便在它运行时不会发生任何其他事情,并且 - 退出 - 在它的末尾只写一次。
【问题讨论】:
-
找到了一个有趣的解释; stackoverflow.com/a/14626474/9039988
标签: python python-3.x concurrency python-multiprocessing