2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Распараллелить программу на Python
Сообщение23.04.2020, 13:41 


23/04/20
4
Добрый день, друзья!
Можете помочь, распараллелить программу на Python. Раньше не сталкивалась с этим и не знаю как это можно сделать.
У меня есть программа численного решения уравнения переноса:
код: [ скачать ] [ спрятать ]
Используется синтаксис Python
# Левое граничное условие при x=0
def f(t):
    return 0

# Начальное распределение u(x) при t=0
def uo(x):
    return math.exp(-((x-0.3)**2)/0.01)

# Правая часть исходного уравнения
def phi(u, x, t):
    return 0

# Подключение пакетов
import math
import matplotlib.pyplot as plt
from threading import Thread


# Коэффициент в уравнении переноса
c=2

# Начальная координата, конечная координата и число точек разбиения
x0=0
xn=1
N=100

# Начальное время, конечное время и число точек разбиения
t0=0
tm=0.1
M=100

# Приращения по координате и времени
dx=(xn-x0)/(N-1)
dt=(tm-t0)/(M-1)

# Объявление массивов
U0=[]
U=[]
x=[]
t=[]

# Инициализация массивов
for i in range(0,N):
    x.append(x0+i*dx)
    U0.append(uo(x[i]))
    U.append(U0[i])

# Начальное время
t.append(t0)

# Создание фигуры
plt.ion()

# Цикл по времени
for k in range(1,M):

    # Граничное условие
    U[0]=f(0)

    # Заполнение массива времени
    t.append(t0+k*dt)

    # Цикл по координате
    for i in range(1,N):

        # Явная разностная схема
        U[i]=U0[i]+dt*(phi(U0[i],x[i],t[k])-c*(U0[i]-U0[i-1])/dx)
    # Переход из одного временного шага к другому
    U0=U;
# Построение грацика
    plt.clf()
    plt.plot (x, U)
    plt.grid()
    plt.xlim(0,1)
    plt.ylim(0,1)
    plt.xlabel('x')
    plt.ylabel('u(x)')
    plt.title('t = '+str(float("{0:.3f}".format(t[k]))))
    plt.draw()
    plt.pause(0.01)
plt.ioff()
# Отрисовка графика
plt.show()
 

 Профиль  
                  
 
 Re: Распараллелить программу на Python
Сообщение23.04.2020, 13:47 


10/04/12
704
Никак, в Python есть GIL, так что... сколько потоков не запускай, всё равно будет выполняться только один. Можно через мультипроцессинг, но для начала я бы использовал numpy как минимум :)

 Профиль  
                  
 
 Re: Распараллелить программу на Python
Сообщение25.04.2020, 20:41 
Заслуженный участник


15/05/05
3445
USA
mustitz в сообщении #1457364 писал(а):
Никак, в Python есть GIL, так что...
В Java реализации (Jython) вроде бы GIL не используется.

 Профиль  
                  
 
 Re: Распараллелить программу на Python
Сообщение25.04.2020, 21:03 


21/05/16
4292
Аделаида
mustitz в сообщении #1457364 писал(а):
, в Python есть GIL

В питоне есть внутренние средства обхода GIL.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group