LINUX.ORG.RU

Python и многопоточность


0

1

Я совсем новичок в питоне, прошу сильно не ругаться на мой, возможно, глупый вопрос.
Меня интересует как создать пару потоков, чтобы они могли общаться друг с другом через какой-нить pipe ?
Был бы очень рад какому-нибудь простенькому примеру.
Заранее спасибо!

не благодари

Я совсем новичок в питоне

Вот так попробуй.

trupiko
()

Никаких Queue, Twisted! Базовые вещи-то надо знать, посему читать книги, в данном случае будет к месту двухтомник Лутца.

satanic-mechanic
()

В последнее время для IPC стала модной библиотека ZeroMQ.

После Эрланга стараюсь избегать общей памяти.

unfo ★★★★★
()
Ответ на: комментарий от unfo

пару потоков

ZeroMQ

как ядерной боеголовкой по муравейнику

true_admin ★★★★★
()

Держи. Все как ты хотел.

import sys
from subprocess import PIPE, Popen
from threading  import Thread

try:
    from Queue import Queue, Empty
except ImportError:
    from queue import Queue, Empty  # python 3.x

ON_POSIX = 'posix' in sys.builtin_module_names

def enqueue_output(out, queue):
    for line in iter(out.readline, b''):
        queue.put(line)
    out.close()

p = Popen(['myprogram.exe'], stdout=PIPE, bufsize=1, close_fds=ON_POSIX)
q = Queue()
t = Thread(target=enqueue_output, args=(p.stdout, q))
t.daemon = True # thread dies with the program
t.start()

# ... do other things here

# read line without blocking
try:  line = q.get_nowait() # or q.get(timeout=.1)
except Empty:
    print('no output yet')
else: # got line
    # ... do something with line
geometer
()
Ответ на: комментарий от Reset

В python для кучи задач хватает queue. Делал многопоточную программу, долго думал, как же там обмениваться данными между потоками... понаписал всякого... потом узнал про queue, и переписал код так, что половину пришлось выкинуть, и выглядеть стало намного проще. Хотя всё равно кривовато. :)

BattleCoder ★★★★★
()
Ответ на: комментарий от AIv

Наверное он не про пистон, а вообще. Трубы далеко не только там можно использовать ;) но и в сишечке.

BattleCoder ★★★★★
()
Ответ на: комментарий от AIv

Они все равно нужны, даже с gil. Что бы сделать какую-нибудь группу операций атомарной.

dizza ★★★★★
()
Ответ на: комментарий от buddhist

А что, надо везде делать как в эрланге? Там изобрели единственно правильную универсальную programming model?

nokachi
()
Ответ на: комментарий от BattleCoder

Ну где-то актёры, где-то не актёры. Мне не очень верится что asynchronous semantics как у эрланга применима ко всему подряд. Иначе мы бы давно засунули всю синхронизацию в язык и писали только на эрлангах.

nokachi
()
Ответ на: комментарий от tailgunner

Там вовсе не про то, как устроено управление памятью в современной виртуальной машине erlang'а. Сейчас там собственная память у каждого процесса, разделяемая память у обычных процессов отсутствует.

maxcom ★★★★★
()
Ответ на: комментарий от maxcom

Там вовсе не про то, как устроено управление памятью в современной виртуальной машине erlang'а

Там про то, как было устроено управление памятью некоторое время назад. Ты хочешь сказать, что сейчас hybrid-архитектуру изжили в пользу process-local?

Сейчас там собственная память у каждого процесса

Erlang-процесса? С этим никто и не спорит.

tailgunner ★★★★★
()
Ответ на: комментарий от SAA

Кто ж вас знает. Сходит к врачу если боитесь что это серьёзно

nokachi
()
Ответ на: комментарий от tailgunner

Он просто прячет ее от программиста.

Угу, где-нибудь между нодами :)

Безусловно, где-то в глубинах BEAM она используется. Но с таким успехом можно скатиться и к утверждению, что message passing'а, как и функциональных языков не существует в природе и всё суть императивщина на разделяемой памяти.

blexey ★★★★★
()
Ответ на: комментарий от blexey

с таким успехом можно скатиться и к утверждению, что message passing'а, как и функциональных языков не существует в природе

Нельзя.

tailgunner ★★★★★
()

вПитоне gil. кошерной многопоточности не добьешься. погули, в общем...

NeverLoved ★★★★★
()
Ответ на: комментарий от tailgunner

На 25 странице (если считать по номерам, указанным в самом pdf) смог найти только это:

There is no shared memory between processes and distribution is almost invisible in ERLANG

Дайте точную цитату если можно.

geometer
()
Ответ на: комментарий от tailgunner

В том то и мощь Эрланга, что он не признает никаких компромиссов. Был бы идеальным языком, если бы не был так коряв.

geometer
()
Ответ на: комментарий от geometer

Нет времени читать 100 страниц

23, не 100. А если нет времени читать, хотя бы воздержись от высказывания своего мнения.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ты-то надеюсь, прочитал. Ну и зацитируй. Я уже приводил здесь цитату противоположного смысла, доказыающую мою точку зрения.

geometer
()
Ответ на: комментарий от geometer

«The first two memory architectures, the one based on private heaps and that based on a shared heap, have been fully implemented and released since the fall of 2001 as part of Erlang/OTP R8».

«Nowadays, all three architectures are included in the Erlang/OTP release».

Что, ты не знаешь, какие это архитектуры? Статью прочитай.

Я уже приводил здесь цитату противоположного смысла, доказыающую мою точку зрения.

У тебя нет точки зрения. Приведенная тобой цитата доказывает только то, что ты не понимаешь, о чем речь.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

The first two memory architectures, the one based on private heaps and that based on a shared heap

Если я как пользователь выберу второй вариант (а это зависит от меня), то никаких разделяемых сообщений не будет. Следовательно это не является обязательным для архитектуры памяти.

У тебя нет точки зрения.

А ты хамоват, брат. Отправляю тебя в игнор.

geometer
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.