Основная проблема заключается в следующем:
self.__start_thread(p)
self.__join_threads(p)
results = self.__extract_data(q)
Вы запускаете своих работников, которые пытаются помещать что-то в очередь, затем присоединяются к работникам и только после этого вы начинаете возвращать данные из очереди. Однако рабочие могут выйти только после того, как все данные будут сброшены в базовую трубу и будут блокироваться при выходе в противном случае. Объединение процессов, заблокированных таким образом, прежде чем начинать извлекать элементы из канала, может привести к тупиковой ситуации.
Возможно, вам стоит заглянуть в multiprocessing.Pool
, как то, что вы пытаетесь реализовать является некоторой функцией map()
. Ваш пример мог бы более элегантно переписать что-то вроде этого:
from multiprocessing import Pool
import string
import random
def func(name):
return 'Test-' + name
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
if __name__ == "__main__":
random.seed(1234)
data_size = 5000
num_proc = 2
test_list = [id_generator() for i in range(data_size)]
with Pool(num_proc) as pool:
result = pool.map(func, test_list)
print(result)
Ошибки connection is disabled
обычно указывают на то, что соединение, которое вы пытаетесь использовать (Username-Password-Authentication
), не включено в данном приложении / клиенте.
Чтобы включить соединение для этого Приложения, перейдите в Приложения , выберите свое Приложение и нажмите на вкладку Подключения. Здесь вы увидите список всех подключений. Убедитесь, что соединение с базой данных, которое вы пытаетесь использовать, включено. Рекомендуется иметь только одно включенное подключение к базе данных для каждого клиента / приложения.