Я могу настроить многопроцессорность и многопоточность для независимой работы с листами Google APIv4, но не могу заставить их работать вместе.
Многопроцессорная обработка (это работает):
from multiprocessing import Pool
import threading
import pandas
class B:
def __init__(self):
self.core = 10
self.b()
def b(self):
p = Pool(self.core)
p.map(multicore, range(10))
def multicore(*args):
thread = 0
if thread == 1:
thread_list = []
for i in range(10):
thread = threading.Thread(target=output_function, args=(i,))
thread_list.append(thread)
thread.start()
else:
output_function(*args)
def output_function(*args):
x = args[0]
print(x * x)
g.build_service()
g.export_df(g.test_API_key, ['output!A' + str(x + 1)], [pandas.DataFrame([[x * x]])], 'n')
Многопоточность (это также работает):
def just_threading():
thread = 1
if thread == 1:
thread_list = []
for i in range(10):
thread = threading.Thread(target=output_function, args=(i,))
thread_list.append(thread)
thread.start()
def output_function(*args):
x = args[0]
print(x * x)
g.build_service()
g.export_df(g.test_API_key, ['output!A' + str(x + 1)], [pandas.DataFrame([[x * x]])], 'n')
Но когда я комбинирую их, установив thread = 1
для первого примера, я не получаю абсолютно никакого вывода на листы Google (print(x*x)
все еще работает).
Что забавно, если я уберу g.build_service()
, он выведет несколько строк, пока не столкнется с проблемами безопасности потоков, описанными здесь: https://developers.google.com/api-client-library/python/guide/thread_safety с ошибкой ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:2273)
. Поэтому восстановление службы имеет значение, но я не вижу вывода на листы!