Основной поток Python замедляется с запуском второго потока цикла whilePython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Основной поток Python замедляется с запуском второго потока цикла while

Сообщение Anonymous »

У меня проблема со следующим кодом. Я запустил новый поток с пустым циклом while.
Это приводит к тому, что функция psutil.net_connections() выполняется медленно. Мне нужно подождать около 1 минуты, чтобы получить результат.

Код: Выделить всё

import psutil
import time
import threading

pid = os.getpid()
proc = psutil.Process(pid)

exit = False

def MyThread1():
while True:
if exit == True:
break
# time.sleep(1)

t1 = threading.Thread(target=MyThread1, args=[])
t1.start()

connections = psutil.net_connections()

for con in connections:
print(con.laddr.port)

exit = True
t1.join()

Когда я нажимаю Ctrl+C, когда код работает. Это показывает, что я прервал код во время lock.acquire при выполнении функции readlink.

Код: Выделить всё

  File "/home/mz/pyenv/lib/python3.11/site-packages/psutil/_pslinux.py", line 215, in readlink
path = os.readlink(path)
^^^^^^^^^^^^^^^^^
KeyboardInterrupt
^CException ignored in: 
Traceback (most recent call last):
File "/usr/lib/python3.11/threading.py", line 1590, in _shutdown
lock.acquire()
KeyboardInterrupt:

Каким-то образом, когда я добавил time.sleep в цикл while, он работает отлично.
Затем я начал читать документацию по потоку Python, и нет никакой информации о том, как работает планировщик. Я читал, что он переключает контекст задачи каждые 100 байт-кодов (Как Python обрабатывает блокировку потоков/переключение контекста?).
Для меня это было неожиданностью, но все равно я до сих пор не могу понять, почему он так себя ведет. Можете ли вы помочь мне понять этот случай? Моя версия Python — Python 3.11.9.

Подробнее здесь: https://stackoverflow.com/questions/793 ... oop-thread
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»