LINQ К SQL легок, и он встроен в.NET 3,5 SP1.
Вместо того, чтобы пытаться управлять этим через подпроцессы или потоки, я рекомендую вам полностью разделить это. Есть два подхода: первый - установить флаг где-нибудь в таблице базы данных и регулярно запускать задание cron, которое проверяет флаг и выполняет требуемую операцию.
Второй вариант - использовать очередь сообщений. Ваш процесс загрузки файла отправляет сообщение в очередь, а отдельный слушатель получает сообщение и делает то, что необходимо. Я использовал RabbitMQ для такого рода вещей, но доступны и другие.
В любом случае вашему пользователю не нужно ждать завершения процесса, и вам не нужно беспокоиться об управлении подпроцессами.
Если вам специально не нужно использовать отдельный процесс, который, кажется, является сутью других вопросов, которые С.Лотт указывает как дубликат вашего, модуль threading
из стандартной библиотеки Python (задокументировано здесь ) может предложить простейшее решение. Просто убедитесь, что handle_file
не обращается ни к каким глобальным объектам, которые могут быть изменены, и тем более не изменяет сами глобальные объекты; в идеале он должен взаимодействовать с остальной частью вашего процесса только через экземпляры Queue ; и т. д. и т. д., все обычные рекомендации по многопоточности; -).
Я попытался сделать то же самое, но потерпел неудачу после нескольких попыток из-за характера django и других асинхронных вызовов.
Решение, которое я придумал, могло быть немного чрезмерным для вас должен иметь другой асинхронный сервер в очереди сообщений фоновой обработки из веб-запроса и бросать некоторый фрагментированный javascript, который анализируется непосредственно из браузера асинхронным способом (то есть: ajax).
Все делается прозрачным для конца пользователь через настройку mod_proxy.