Каков рекомендуемый способ прервать неожиданно длинные потоки в python? Я не могу использовать SIGALRM, так какЗавершить длинные потоки python
Некоторые уход должны быть приняты, если оба сигналы и нити используются в одной и той же программы . Фундаментальное значение для при использовании сигналов и потоков одновременно: всегда выполняет сигнал() в основной строке исполнения. Любая нить может выполнять alarm(), getsignal(), pause(), setitimer() или getitimer(); только основной поток может установить новый обработчик сигнала , и основной поток будет только один, чтобы принимать сигналы (это обеспечивается модулем Python сигнала , даже если реализация потока поддерживает отправку сигналы к отдельным потокам). Это значение означает, что сигналы не могут использоваться как средства связи между потоками . Вместо этого следует использовать блокировки.
Обновление: каждый поток в моем случае блокирует - он загружает веб-страницу с использованием модуля urllib2, а иногда операция занимает слишком много времени на чрезвычайно медленных сайтах. Вот почему я хочу прекратить такие медленные потоки
Проблема заключается в том, что у вас есть один метод, который занимает слишком много времени (например, urllib.read(), который в некоторых случаях игнорирует таймауты), которые вы «Я хотел бы прервать. – kolinko
Если вы выполняете это, прочитав в своем потоке, не можете ли вы просто перестать его ждать? В конце концов, он завершит/завершит неудачу/закончен, а затем он просто умрет? –