Найти - Пользователи
Полная версия: Аналог pthread_detach() в Python
Начало » Python для новичков » Аналог pthread_detach() в Python
1
bav
Добрый день, уважаемые форумчане. Во время создания многопоточного приложения (с использованием модуля 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, но безрезультатно.
GaiveR
Краткий ответ: не нужен.

Подробный ответ:
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);
...
}
bav
И снова все оказалось довольно просто. Спасибо большое, GaiverR за подробное объяснение
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB