LINUX.ORG.RU

«RuntimeError : not holding the import lock» при демонизации внутри импортируемого модуля

 


0

1

Есть некоторый модуль, который при импорте (и некоторых параметрах) должен демонизировать процесс. Да, я знаю, что это не очень хороший дизайн, но это вариант для ленивых пользователей - весь функционал подключается одним импортом. Демонизация выглядит как то так:

#racs.py
if _daemonize :
    if os.fork() : time.sleep(1); sys.exit()
    logfile, stdin = open( path+'logfile', 'w' ), open('/dev/null')
    os.setsid() 
    os.dup2( stdin.fileno(),   sys.stdin.fileno()  ) 
    os.dup2( logfile.fileno(), sys.stdout.fileno() ) 
    os.dup2( logfile.fileno(), sys.stderr.fileno() )
...
#test.py
from racs import *

Дальше потомок умирает при выходе из racs (поскольку хвост racs успевает отработать) со словами:

Traceback (most recent call last):
  File "./test.py", line 3, in <module>
    from racs import *
RuntimeError: not holding the import lock
        File "./test.py", line 3, in <module>
RuntimeError : not holding the import lock

Это вообще как нить лечится?

★★★★★

Ответ на: комментарий от zz

Я туплю, у меня питон 2.6.6 - это значит что на 2м такого щастья ждать не приходиться? Хотя они там чего то писали про 2.7, но мне надо что бы оно работало везде где хотя бы 2.6 стоит;-(

не надо так делать

Я уже осознал, но тут дилемма - то ли делать так, то ли делать правильно и терять обратную совместимость. Обратная совместимость это священная корова... меня же проклянут.

AIv ★★★★★
() автор топика
Ответ на: комментарий от AIv

Судя по тикету во второую ветку не стали бекпортировать. Так что да, ломать совместимость или на 3.3 :) Я бы взял python-daemon потому что попадет в стдлиб.

zz ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.