Вы, вероятно, хотите 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
Обновление
В идеале ваш файл должен быть структурирован следующим образом:
import blah, blah, blah;
class Student: # or perhaps this is imported above
# definition of this class
def foo():
# definition of foo
def bar():
#d definition of bar
def query_database():
load_dotenv()
# obtain connection and cursor (code not shown)
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)
return object_list
if __name__ == '__main__':
object_list = query_database() # get Student list
with multiprocessing.Pool(processes=8) as pool:
instance_list = list()
for x in object_list:
result = pool.apply_async(x.login)
instance_list.append(result)
for result in instance_list:
result.get() # return value from login, which is None
Обновление 2
Поскольку метод login
не отображается в быть процесс, связанный с процессором, вы можете рассмотреть использование потоков. Этот код не обязательно должен находиться внутри блока __main__
(хотя это совершенно правильно сделать):
from concurrent.futures import ThreadPoolExecutor
object_list = query_database() # get Student list
with ThreadPoolExecutor(max_workers=8) as executor:
instance_list = list()
for x in object_list:
future = executor.submit(x.login)
instance_list.append(future)
for future in instance_list:
future.get() # return value from login, which is None