Python 多处理函数
Python Multiprocessing function
我有一个函数,例如:
launcher(usr_login, usr_password)
调用其他 python 脚本 + usr_login + usr_password 作为参数。
见:
函数
launcher("login", "pass")
将执行 function.py 文件作为 $function.py login pass
主题:
我有 dict user_login :密码,我希望能够在一次多线程/多处理
中启动一个 'launcher' 函数
dict 有 login1 : pass1 , login2 : pass2
所以我需要同时启动 launcher(login1, pass1) 和 launcher(login2, pass2)。
有办法吗?
谢谢
# -*- coding: utf-8 -*-
from config import users, ThCount
from time import sleep
from multiprocessing import Pool
import os
users = {}
def launcher(usr_login, usr_password):
os.system("C:\Python34\python.exe implementation.py %s %s" % (usr_login, usr_password))
回复评论 #1
如果我这样使用:
def launcher(usr_login, usr_password):
os.system("C:\Python34\python.exe implementation.py %s %s" % (usr_login, usr_password))
if __name__ == '__main__':
with Pool(5) as p:
p.map(launcher, users)
我得到了:
TypeError: launcher() missing 1 required positional argument: 'usr_password'
您不能使用 Pool.map()
.
将多个参数传递给函数
作为一个简单的解决方案,您可以将它们打包成元组。
# -*- coding: utf-8 -*-
from multiprocessing import Pool
import os
users = {
'a': '1',
'b': '2',
'c': '3'
}
def launcher(args):
os.system("python implementation.py %s %s" % (args[0], args[1]))
if __name__ == '__main__':
with Pool(3) as p:
p.map(launcher, users.items())
UPD 我注意到您使用的是 Python 3.4。从版本 3.3 开始,您可以使用 Pool.starmap 传递多个参数,因此保持参数列表像以前一样可读。
# -*- coding: utf-8 -*-
from multiprocessing import Pool
import os
users = {
'a': '1',
'b': '2',
'c': '3'
}
def launcher(usr_login, usr_password):
os.system("python implementation.py %s %s" % (usr_login, usr_password))
if __name__ == '__main__':
with Pool(3) as p:
p.starmap(launcher, users.items())
我有一个函数,例如:
launcher(usr_login, usr_password)
调用其他 python 脚本 + usr_login + usr_password 作为参数。
见: 函数
launcher("login", "pass")
将执行 function.py 文件作为 $function.py login pass
主题:
我有 dict user_login :密码,我希望能够在一次多线程/多处理
dict 有 login1 : pass1 , login2 : pass2 所以我需要同时启动 launcher(login1, pass1) 和 launcher(login2, pass2)。 有办法吗? 谢谢
# -*- coding: utf-8 -*-
from config import users, ThCount
from time import sleep
from multiprocessing import Pool
import os
users = {}
def launcher(usr_login, usr_password):
os.system("C:\Python34\python.exe implementation.py %s %s" % (usr_login, usr_password))
回复评论 #1 如果我这样使用:
def launcher(usr_login, usr_password):
os.system("C:\Python34\python.exe implementation.py %s %s" % (usr_login, usr_password))
if __name__ == '__main__':
with Pool(5) as p:
p.map(launcher, users)
我得到了:
TypeError: launcher() missing 1 required positional argument: 'usr_password'
您不能使用 Pool.map()
.
作为一个简单的解决方案,您可以将它们打包成元组。
# -*- coding: utf-8 -*-
from multiprocessing import Pool
import os
users = {
'a': '1',
'b': '2',
'c': '3'
}
def launcher(args):
os.system("python implementation.py %s %s" % (args[0], args[1]))
if __name__ == '__main__':
with Pool(3) as p:
p.map(launcher, users.items())
UPD 我注意到您使用的是 Python 3.4。从版本 3.3 开始,您可以使用 Pool.starmap 传递多个参数,因此保持参数列表像以前一样可读。
# -*- coding: utf-8 -*-
from multiprocessing import Pool
import os
users = {
'a': '1',
'b': '2',
'c': '3'
}
def launcher(usr_login, usr_password):
os.system("python implementation.py %s %s" % (usr_login, usr_password))
if __name__ == '__main__':
with Pool(3) as p:
p.starmap(launcher, users.items())