Когда вы запускаете поток, вы выполняете метод некоторого выбранного класса. Все атрибуты этого класса видимы.
Worker myWorker = new Worker( /* arguments */ );
Thread myThread = new Thread(new ThreadStart(myWorker.doWork));
myThread.Start();
Ваш поток теперь находится в методе doWork () и может видеть любые атрибуты myWorker, которые сами могут быть другими объектами. Теперь вам просто нужно быть осторожным, чтобы иметь дело со случаями, когда несколько потоков одновременно обращаются к этим атрибутам.
Я думаю, проблема в этот cron будет запускать ваши скрипты в «голой» среде, поэтому ваш DJANGO_SETTINGS_MODULE, скорее всего, не определен. Вы можете заключить это в сценарий оболочки, который сначала определяет DJANGO_SETTINGS_MODULE
Примерно так:
#!/bin/bash
export DJANGO_SETTINGS_MODULE=myproject.settings
./manage.py mycommand
Сделайте его исполняемым (chmod + x), а затем настройте cron для запуска скрипта вместо этого.
Изменить
] Я также хотел сказать, что вы можете "модулировать"
If you want your Django life a lot more simple, use django-command-extensions within your project:
http://code.google.com/p/django-command-extensions/
You'll find a command named "runscript" so you simply add the command to your crontab line:
****** root python /path/to/project/myapp/manage.py runscript mycommand
And such a script will execute with the Django context environment.
cd /path/to/project/myapp && python manage.py mycommand
Если объединить ваши команды таким образом, python не будет выполняться, если cd не изменится правильно каталог.
Расширение runscript не было хорошо документировано. В отличие от команды django, она может идти в любом месте вашего проекта и требует папки scripts. Для .py файла требуется функция run().