Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 5, 2013 14:53:38

bav
Зарегистрирован: 2012-09-27
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог pthread_detach() в Python

Добрый день, уважаемые форумчане. Во время создания многопоточного приложения (с использованием модуля threading) у меня возник вот какой вопрос (но сначала немного кода):

# Импортируем функцию run,
# которую будем запускать в отдельном потоке
from src.player import run
# Модуль обеспечивающий многопоточность
import threading
# Создаем поток и запускаем его (здесь conn и bids
# просто какие-то параметры не играющие роли).
t = threading.Thread(target=run, args=(conn, bids))
t.start()
Так вот. В C++ (POSIX thread libraries) есть еще функция pthread_detach(), которая “put a running thread in the detached state”, т.е. при завершении работы потока (в нашем случае функции run) освобождает память, занимаемую потоком. Это можно проследить (по крайней мере в Linux) с помощью команды ps -FL <номер_процесса>. Но в Python я пока не нашел аналога pthread_detach(), да и не знаю нужен ли он.
В этом и вопрос существует ли некий аналог указанной функции?

P.S. Я искал информацию на docs.python.org и в Google, но безрезультатно.

Отредактировано bav (Янв. 5, 2013 20:53:58)

Офлайн

#2 Янв. 5, 2013 22:31:00

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

Аналог pthread_detach() в Python

Краткий ответ: не нужен.

Подробный ответ:
1. Если вы это можете проверить - в чём вопрос тогда? Запустите да посмотрите :)
2. В доках в разделе работы с потоками об этом ни слова - вероятно и думать об этом не нужно.
3. Если хочется докопаться до правды качаем сорцы питона, находим там код отвечающий за создание потока и видим(файл thread_pthread.h):

long
PyThread_start_new_thread(void (*func)(void *), void *arg)
{
...
status = pthread_create(&th,
#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
&attrs,
#else
(pthread_attr_t*)NULL,
#endif
(void* (*)(void *))func,
(void *)arg
);

#if defined(THREAD_STACK_SIZE) || defined(PTHREAD_SYSTEM_SCHED_SUPPORTED)
pthread_attr_destroy(&attrs);
#endif
if (status != 0)
return -1;

pthread_detach(th);
...
}



Офлайн

#3 Янв. 6, 2013 08:39:45

bav
Зарегистрирован: 2012-09-27
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Аналог pthread_detach() в Python

И снова все оказалось довольно просто. Спасибо большое, GaiverR за подробное объяснение

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version