тайна таймера Python

Ну, по крайней мере, тайна мне. Рассмотрите следующее:

import time
import signal

def catcher(signum, _):
    print "beat!"

signal.signal(signal.SIGALRM, catcher)
signal.setitimer(signal.ITIMER_REAL, 2, 2)

while True:
    time.sleep(5)

Работы как ожидалось т.е. поставляют "удар!" сообщение каждые 2 секунды. Затем, никакой вывод не производится:

import time
import signal

def catcher(signum, _):
    print "beat!"

signal.signal(signal.SIGVTALRM, catcher)
signal.setitimer(signal.ITIMER_VIRTUAL, 2, 2)

while True:
    time.sleep(5)

Где проблема?

8
задан jldupont 18 February 2010 в 20:43
поделиться

2 ответа

Из моего системного человека setitimer (выделено мной):

Система предоставляет каждому процессу три интервальных таймера, каждый из которых убывает за определенное время. домен . Когда любой таймер истекает, процессу посылается сигнал, и таймер (потенциально) перезапускается.

ITIMER_REAL уменьшается в реальном времени и доставляет SIGALRM по истечении срока.

ITIMER_VIRTUAL уменьшается только тогда, когда процесс выполняет , и доставляет SIGVTALRM по истечении срока.

Вы только что упустили из виду, что ваш процесс не выполняется во время сна? У вас уйдет очень много времени, чтобы накопить фактически использованное время с этим циклом.

15
ответ дан 5 December 2019 в 08:52
поделиться

Как сказал Аарон, безопасность Windows Share имеет два компонента Первый - безопасность самой Акции. Второй - безопасность файлов и папок в этом общем ресурсе.

Для этого оба должны разрешить доступ к каталогу.

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

Это означает, что первое, что вы хотите сделать, это увидеть, под каким пользователем это действительно работает. Если он работает под учетной записью компьютера И не является частью домена, то необходимо предоставить этой учетной записи компьютера доступ к общему ресурсу и файловой системе.

-121--4481866-

Да, она безопасна для потока со стратегией по умолчанию ( MODE _ THREADLOCAL ) (если вы не пытаетесь изменить стратегию на лету). Однако если необходимо, чтобы порожденные потоки наследовали SecurityContext родительского потока, необходимо задать MODE _ INHERITABLETHREADLOCAL .

Также аспекты не имеют никакой "логики многопоточности", они выполняются в том же потоке, что и рекомендованный метод.

-121--4378584-

Сигнал .ITIMER _ VIRTUAL засчитывается только при запущенном процессе. time.sleep (5) приостанавливает процесс, чтобы таймер не уменьшился.

4
ответ дан 5 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: