Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569

Как запустить несколько экземпляров функции

14.08.2018, 18:11. Показов 4257. Ответов 8

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я хочу запускать несколько экземпляров функции Pi_num__idea2 с разными параметрами, использую несколько процессов и каждый процесс пишет в опр. файл, путь к которому я передаю через аргумент

Python
1
2
3
4
5
from multiprocessing import Process, Pool
 
pool = Pool(11)
    
pool.map(Pi_num__idea2, [('pi', 2),('pi', 3),('pi', 4),('e', 1),('e', 2),('e', 3),('e', 4),('s2', 1),('s2', 2),('s2', 3),('s2', 4)])
У меня на данный момент завис скрипт и никаких файлов по пути нет.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2018, 18:11
Ответы с готовыми решениями:

Как запустить несколько экземпляров браузеров в c#?
Начал делать многопоточность, куча проблем. Как работает selenium grid? каким образом на c# можно запустить несколько экземпляров браузера,...

Как запустить несколько экземпляров приложения AUTOPRN.EXE ?
Каким образом можно запустить сразу несколько экземпляров приложения AUTOPRN.EXE ? YupiRex, наверное Вы знаете ?

Как в visual studio запустить несколько экземпляров приложения?
сабж.

8
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.08.2018, 19:33
Методы из multiprocessing так не вызывают. В доках написано - как правильно.
У вас windows? Тогда скрипту обязательно нужна точка входа main.
1
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
14.08.2018, 20:31  [ТС]
Да конечно я через main и вызываю вот так:

Python
1
2
3
4
5
6
7
8
from multiprocessing import Process, Pool
if __name__ == '__main__':
    
    def Pi_num__idea2(method, idea):
        pass
    
    with Pool(processes=11) as pool:
        pool.map(Pi_num__idea2, [('pi', 2),('pi', 3),('pi', 4),('e', 1),('e', 2),('e', 3),('e', 4),('s2', 1),('s2', 2),('s2', 3),('s2', 4)])
А еще если это windows - то следует процессы проинициализировать заранее


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Pi_2 = Process(target=Pi_num__idea2('pi', 2))
Pi_3 = Process(target=Pi_num__idea2('pi', 3))
Pi_4 = Process(target=Pi_num__idea2('pi', 4))
    
E_1 = Process(target=Pi_num__idea2('e', 1))
E_2 = Process(target=Pi_num__idea2('e', 2))
E_3 = Process(target=Pi_num__idea2('e', 3))
E_4 = Process(target=Pi_num__idea2('e', 4))
 
Pi_2.start()
Pi_3.start()
Pi_4.start()
    
E_1.start()
E_2.start()
E_3.start()
E_4.start()
 
Pi_2.join()
Pi_3.join()
Pi_4.join()
    
E_1.join()
E_2.join()
E_3.join()
E_4.join()
но я и так делал - и работал только 1 процесс, - т.е. остальных файлов я не видел в целевой директории.

сделал так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from multiprocessing import Process, Pool
def Pi_num__idea2(method, idea):
        pass
def multiprocessed():
    my_list = [('pi', 2),('pi', 3),('pi', 4),('e', 1),('e', 2),('e', 3),('e', 4),('s2', 1),('s2', 2),('s2', 3),('s2', 4)]
    processes = []
    for i in range(11):
        p = Process(target=Pi_num__idea2, args=my_list[i])
        processes.append(p)
    # Start the processes
    for p in processes:
        p.start()
    # Ensure all processes have finished execution
    for p in processes:
        p.join()
 
if __name__ == '__main__':
    
    multiprocessed()
Если их через цикл стартовать, что таким вот образом как последнее выше - то работает. Они все писатели в разные файлы, поэтому данные там никак не общие. Все норм.))
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.08.2018, 21:07
Вот пример с map, который вполне себе работает.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from multiprocessing import Pool
import os
 
addresses = ['yandex.ru', 'не_существует.ru', 'rambler.ru'] * 100
 
def ping(ip):
    res = os.system("ping -n 1 " + ip +'>nul')
    return (ip,res)
 
def multi_ping(workers,func):
    pool = Pool(workers)
    results = pool.map(func, addresses)
    
    for r in results:
       print(r)
    
    pool.close()
    pool.join() 
    
if __name__ == '__main__':   
    multi_ping(10,ping)
0
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
14.08.2018, 21:58  [ТС]
Ой, нет, результаты лучше в консоль не выводить - там много данных и память переполнится.

Только вот почему то некоторые процессы сделали лишь 2 записи и на это пока все. Тогда как другие сделали намного больше. О чем это говорит?
0
5 / 5 / 0
Регистрация: 25.09.2017
Сообщений: 569
15.08.2018, 11:21  [ТС]
Garry Galler, а вы это в Unix системе запускали - ваш код последний?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.08.2018, 00:10
Цитата Сообщение от Alex_py Посмотреть сообщение
вы это в Unix системе запускали
Естественно, нет. Здесь явно указана виндовая функция ping. У линуксовой другой формат опций.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.08.2018, 00:13
Цитата Сообщение от Garry Galler Посмотреть сообщение
У вас windows? Тогда скрипту обязательно нужна точка входа main.
Чего ?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.08.2018, 01:49
Цитата Сообщение от Avazart Посмотреть сообщение
Чего ?
Точка входа в приложение. Аналог main в С\С++.
Требуется для правильного multiprocessing'а на windows.
Если непонятно - поищите в документации python.

Добавлено через 31 минуту
P.S. Без блока if __name__ == "__main__" "форкнутый" (виндовым способом) подпроцесс запустит код еще раз, а потом еще раз... и будет как в песне: "эх, раз, еще раз, еще много много раз".
С блоком - условие выполнится только в родительском процессе. А в дочерних __name__ модуля будет равно '__mp_main__'.
shsv недавно об этом упоминал в аналогичной теме.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.08.2018, 01:49
Помогаю со студенческими работами здесь

Реализовать базовый и производный классы. В главной функции создать несколько экземпляров каждого класса и протестироват
Создать класс тройки чисел. Определить конструкторы, деструктор, функции доступа к полям, ввода вывода и вычисления суммы чисел....

Как сгенерировать несколько экземпляров объекта?
Есть класс рабочий у которого есть поля имя, возраст и т.д. и метод - делать. Нужно сгенерировать несколько экземпляров класса с...

Как хранить несколько экземпляров класса с их свойствами?
Есть у нас класс - овощи объект - овощ: картошка, огурец, морковь у них есть свойства - цвет, вес, ширина, высота, они хранятся тоже в...

Как открыть в MDI форму MDIChild в несколько экземпляров?
Подскажите как можно открыть в MDI форму MDIChild в несколько экземпляров... Т.е. У меня есть форма MDI И Форма MDIChild При...

Как запретить запускать несколько экземпляров одной проги?
Напомните, пожалуйста, как запретить запускать несколько экземпляров одной проги. (Например, как Word) Благодарю.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru