无法让多处理功能与我的Python类实例一起使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法让多处理功能与我的Python类实例一起使用相关的知识,希望对你有一定的参考价值。
基本上,我想为同一对象创建几个实例,并同时分别执行它们。示例代码:
if __name__ == '__main__':
load_dotenv()
query = "SELECT username, password FROM students"
cursor.execute(query)
records = cursor.fetchall()
print("Total number of accounts botting up ", cursor.rowcount)
object_list = list()
for username, password in records:
obj = Student(username, password)
object_list.append(obj)
instance_list = list()
for x in object_list:
p = multiprocessing.Process(target=x.login)
p.start()
instace_list.append(p)
for x in instance_list:
x.join()
ps:login()是类内部的方法。
到目前为止,我已经让他们全部创建了该类的实例,但是还无法为每个实例执行login方法。
我在终端中收到此错误:
(student-bot) C:pythonstudent-bot>Traceback (most recent call last):
File "<string>", line 1, in <module>
File "c:usersalbertoappdatalocalprogramspythonpython37libmultiprocessingspawn.py", line 99, in spawn_main
new_handle = reduction.steal_handle(parent_pid, pipe_handle)
File "c:usersalbertoappdatalocalprogramspythonpython37libmultiprocessing
eduction.py", line 87, in steal_handle
_winapi.DUPLICATE_SAME_ACCESS | _winapi.DUPLICATE_CLOSE_SOURCE)
PermissionError: [WinError 5] Acceso denegado
[13852:1860:0427/193022.541:ERROR:device_event_log_impl.cc(162)] [19:30:22.541] Bluetooth: bluetooth_adapter_winrt.cc:1055 Getting Default Adapter failed.
答案
您可能想要target=x.login
,而不是x.login()
。否则,您将调用target.login()
返回的任何内容,甚至可能无法调用。一个“正在执行”的过程实际上可能只是主线程,并且是您已经编码x.login()
的结果,但实际上所有子过程都没有工作。显示错误消息会很有帮助。还要确保上面的代码在以下列开头的块内:
if __name__ == '__main__':
例如:
import multiprocessing
class Foo:
def bar(self, i):
print(i, flush=True)
f = Foo()
if __name__ == '__main__':
instace_list = list()
for i in range(3):
p = multiprocessing.Process(target=f.bar, args=(i,))
p.start()
instace_list.append(p)
for x in instace_list:
x.join()
打印:
0
1
2
以上是关于无法让多处理功能与我的Python类实例一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Express-Socket.IO 应用程序无法与我的 Azure WebApp 一起使用
如何将 OBIEE 的 FORECAST 功能与我的日历维度一起使用?
无法与我的 EC2 实例建立 Internet 连接 [使用 terraform 部署,并为 ACL、安全组、Internet GW 打开了 80 个 http 端口]