Я написал приложение, которое открывает несколько подпроцессов, которые инициируют индивидуальные подключения к серверу Perforce. Через некоторое время я получаю это сообщение об ошибке почти во всех дочерних процессах:
Traceback (most recent call last):
File "/Users/peter/Desktop/test_app/main.py", line 76, in p4_execute
p4.run_login()
File "/usr/local/lib/python3.7/site-packages/P4.py", line 665, in run_login
return self.run("login", *args, **kargs)
File "/usr/local/lib/python3.7/site-packages/P4.py", line 611, in run
raise e
File "/usr/local/lib/python3.7/site-packages/P4.py", line 605, in run
result = P4API.P4Adapter.run(self, *flatArgs)
P4.P4Exception: [P4#run] Errors during command execution( "p4 login" )
[Error]: "Fatal client error; disconnecting!
Operation 'client-SetPassword' failed.
Too many trys to get lock /Users/peter/.p4tickets.lck."
Кто-нибудь знает, что могло вызвать это? Я правильно открываю свои соединения и дважды проверяю все исходные местоположения, которые я должным образом отключаю от сервера через disconnect
.
Только удаление .p4tickets.lck вручную работает, пока ошибка не вернется через несколько секунд.
🤔 А знаете ли вы, что...
В Python есть среды разработки, такие как Jupyter Notebook, которые упрощают работу с данными и исследованиями.
Соответствующий код находится здесь:
Я не вижу кодового пути, по которому файл ticket.lck не удалось бы очистить без какой-либо другой ошибки.
Есть ли что-нибудь необычное в домашнем каталоге, в котором находится файл билетов? Например, он находится в сетевом фильтре с некоторой задержкой и каким-то процессом резервного копирования? Или, может быть, тот, который не обеспечивает должным образом блокировку файлов между всеми этими подпроцессами, которые вы создаете?
Как часто ваши скрипты запускают "p4 login" для обновления и перезаписи тикета? Много раз в секунду? Если вы измените их так, чтобы они этого не делали (например, входите только в систему, если еще нет билета), проблема не исчезнет?