0
Я застенчив, чтобы узнать, как поведение with with os.fork каким-то образом определено в спецификации python и как я должен использовать с os.fork.Использование python с with os.fork
Если я, к примеру:
import tempfile
import os
with tempfile.TemporaryDirectory() as dir:
pid = os.fork()
print(pid)
print(dir)
Тогда, кажется, использует наивное поведение удаления TemporaryDirectory дважды:
> python3 foo.py
27023
/tmp/tmpg1typbde
0
/tmp/tmpg1typbde
Traceback (most recent call last):
File "foo.py", line 6, in <module>
print(dir)
File "/usr/lib/python3.4/tempfile.py", line 824, in __exit__
self.cleanup()
File "/usr/lib/python3.4/tempfile.py", line 828, in cleanup
_rmtree(self.name)
File "/usr/lib/python3.4/shutil.py", line 467, in rmtree
onerror(os.rmdir, path, sys.exc_info())
File "/usr/lib/python3.4/shutil.py", line 465, in rmtree
os.rmdir(path)
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpg1typbde'
Я интересно:
- Если поведение действительно определено
- Как лучше всего использовать являются временным справочником между двумя процессами
Возможно, вы можете использовать '' os._exit() '' в дочернем процессе для завершения без какой-либо очистки. Это предполагает, что все, что нужно очистить, разделяется с родительским процессом. – jasonharper
Не настоящий ответ, но действительно ли нужно идти на этот уровень? Обычно существуют более специализированные механизмы для управления несколькими процессами в python для конкретной работы, например. многопроцессорная. – languitar
@ languitar Я не уверен. Код, над которым я сейчас работаю, находится в моем тестовом костюме. Цель кода - порождать многие версии моей программы, чтобы попытаться проверить, есть ли какие-либо гонки в коде блокировки при запуске программы. Поэтому я действительно хочу, чтобы вещи происходили одновременно;). Но вы, вероятно, правы в общем, что os.fork - это не самое лучшее, что можно сделать в python ... – timthelion