2014 dxdy logo

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

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




 
 Распараллелить программу на Python
Сообщение23.04.2020, 13:41 
Добрый день, друзья!
Можете помочь, распараллелить программу на 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 
Никак, в Python есть GIL, так что... сколько потоков не запускай, всё равно будет выполняться только один. Можно через мультипроцессинг, но для начала я бы использовал numpy как минимум :)

 
 
 
 Re: Распараллелить программу на Python
Сообщение25.04.2020, 20:41 
mustitz в сообщении #1457364 писал(а):
Никак, в Python есть GIL, так что...
В Java реализации (Jython) вроде бы GIL не используется.

 
 
 
 Re: Распараллелить программу на Python
Сообщение25.04.2020, 21:03 
mustitz в сообщении #1457364 писал(а):
, в Python есть GIL

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

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group