Я использовал код Visual Studio в Windows, чтобы написать ряд Python скриптов, которые выполняют сточасти c симуляции 3-х биологических систем. Всего у меня 6 Python скриптов, каждая биологическая система имеет скрипт, который имитирует систему 5 раз параллельно, используя библиотеку многопроцессорной обработки Python, и другой скрипт, который имитирует систему 5 раз последовательно.
Однако выполнение сценариев с использованием кода Visual Studio в Windows приводит к тому, что последовательные сценарии всегда работают быстрее (не то, что я хочу).
Было высказано предположение, что накладные расходы на настройку параллельных процессов в среде IDE могут были моей проблемой. Итак, я запускал сценарии в Windows powershell, но последовательные сценарии все еще были быстрее.
Первый вопрос: Существуют ли какие-либо известные проблемы с запуском параллельного моделирования в Windows, которые могли бы объяснить почему последовательные сценарии постоянно быстрее?
Сейчас я пытаюсь запустить сценарии, используя подсистему Windows для Linux. Скрипты используют довольно много импорта, включая numpy, scipy, datetime и multiprocessing. Только когда я запускаю здесь скрипты, я получаю следующую ошибку:
ModuleNotFoundError: No module named 'numpy'
Второй вопрос: Как мне установить все соответствующие модули и импорт для запуска моих Python скриптов в Windows подсистема для Linux.
Ниже приведен код для последовательных и параллельных процессов, если это помогает:
Последовательный:
def repeat_func(times, start_state, LHS, stoch_rate, state_change_array):
""" Function to call and run other functions multiple times """
start = datetime.utcnow()
for i in range(times):
popul_num_all, tao_all = gillespie_tau_leaping(start_state, LHS, stoch_rate, state_change_array)
end = datetime.utcnow()
sim_time = end - start
print("Simulation time:\n", sim_time)
Параллельный:
def parallel_func(v):
gillespie_tau_leaping(start_state, LHS, stoch_rate, state_change_array)
if __name__ == '__main__':
start = datetime.utcnow()
with Pool() as p:
pool_results = p.map(parallel_func, [1, 2, 3, 4, 5])
end = datetime.utcnow()
sim_time = end - start
print("Simulation time:\n", sim_time)
Ура.