Saya mencari perpustakaan dengan Python yang akan menyediakan at
dan cron
menyukai fungsionalitas.
Saya cukup suka memiliki solusi Python murni, daripada mengandalkan alat yang diinstal pada kotak; dengan cara ini saya menjalankan mesin tanpa cron.
Bagi mereka yang tidak terbiasa dengan cron
: Anda dapat menjadwalkan tugas berdasarkan pada ekspresi seperti:
0 2 * * 7 /usr/bin/run-backup # run the backups at 0200 on Every Sunday
0 9-17/2 * * 1-5 /usr/bin/purge-temps # run the purge temps command, every 2 hours between 9am and 5pm on Mondays to Fridays.
Sintaks ekspresi waktu cron kurang penting, tetapi saya ingin memiliki sesuatu dengan fleksibilitas semacam ini.
Jika tidak ada sesuatu yang melakukan ini untuk saya di luar kotak, saran untuk blok bangunan untuk membuat sesuatu seperti ini akan diterima dengan penuh syukur.
Sunting Saya tidak tertarik dalam meluncurkan proses, hanya "pekerjaan" juga ditulis dengan fungsi Python - python. Menurut kebutuhan saya pikir ini akan menjadi utas yang berbeda, tetapi tidak dalam proses yang berbeda.
Untuk tujuan ini, saya mencari ekspresifitas ekspresi waktu cron, tetapi dengan Python.
Cron telah ada selama bertahun-tahun, tetapi saya mencoba untuk menjadi se portable mungkin. Saya tidak bisa mengandalkan kehadirannya.
sumber
Jawaban:
Jika Anda mencari jadwal checkout yang ringan :
Pengungkapan : Saya penulis perpustakaan itu.
sumber
schedule
. Itu bekerja dengan baik untuk saya. Akan lebih baik jika memiliki cron seperti sintaks dan dekorator yang didukung (lihat crython tetapi tidak menggunakan perpustakaan ini karena tidak berfungsi; penjadwalan sepertinya tidak ditulis dengan baik).do()
Fungsi meneruskan argumen tambahan yang Anda berikan ke fungsi pekerjaan: schedule.readthedocs.io/en/stable/api.html#schedule.Job.do Misalnya, Anda dapat melakukan ini :schedule.every().hour.do(job, param1, param2)
Tidak perlu menggunakan lambda. Semoga ini bisa membantu :)Anda bisa menggunakan argumen Python normal lewat sintaks untuk menentukan crontab Anda. Sebagai contoh, misalkan kita mendefinisikan kelas Peristiwa seperti di bawah ini:
(Catatan: Tidak diuji secara menyeluruh)
Maka CronTab Anda dapat ditentukan dalam sintaks python normal sebagai:
Dengan cara ini Anda mendapatkan kekuatan penuh dari mekanisme argumen Python (mencampur argumen posisi dan kata kunci, dan dapat menggunakan nama simbolik untuk nama minggu dan bulan)
Kelas CronTab akan didefinisikan sebagai hanya tidur dengan penambahan menit, dan memanggil cek () pada setiap acara. (Mungkin ada beberapa seluk-beluk dengan waktu / zona waktu siang hari untuk diwaspadai) Berikut ini adalah implementasi cepat:
Beberapa hal yang perlu diperhatikan: Hari kerja / bulan Python tidak diindeks nol (tidak seperti cron), dan rentang itu tidak termasuk elemen terakhir, maka sintaksis seperti "1-5" menjadi rentang (0,5) - yaitu [0,1,2, 3,4]. Jika Anda lebih suka sintaks cron, parsing itu seharusnya tidak terlalu sulit.
sumber
pip install anything
:)mungkin ini baru muncul setelah pertanyaan diajukan; Saya pikir saya hanya menyebutkannya demi kelengkapan: https://apscheduler.readthedocs.org/en/latest/
sumber
Satu hal yang saya cari dalam pencarian saya adalah
sched
modul python yang mungkin merupakan jenis yang Anda cari.sumber
"... Modul Crontab untuk membaca dan menulis file crontab dan mengakses cron sistem secara otomatis dan hanya menggunakan API langsung. ..."
http://pypi.python.org/pypi/python-crontab
dan juga APScheduler, paket python. Sudah ditulis & di-debug.
http://packages.python.org/APScheduler/cronschedule.html
sumber
Lebih atau kurang sama dengan di atas tetapi bersamaan menggunakan gevent :)
sumber
Tak satu pun dari solusi yang terdaftar bahkan berupaya mengurai string jadwal cron yang kompleks. Jadi, ini versi saya, menggunakan croniter . Inti dasar:
Rutinitas pembantu:
sumber
elif
? Atm Saya menggunakan jadwal seperti"* * * * *"
kemudian menambahkan beberapatime.sleep
lebih besar dari 1 menit di "Lakukan hal periodik Anda"if
, tapi saya selalu melihat hal-hal dalam pernyataan itu jika. Ketika dibutuhkan lebih dari 1 menit, saya hanya melihat loop sementara melewatkan eksekusi loop yang hilang.Saya telah memodifikasi skrip.
Mudah digunakan:
Cobalah untuk memulai tugas di detik pertama.
Kode pada Github
sumber
Saya memiliki perbaikan kecil untuk metode menjalankan kelas CronTab yang disarankan oleh Brian .
Waktunya habis oleh satu detik yang mengarah ke satu detik, putaran keras pada akhir setiap menit.
sumber
Tidak ada cara "python murni" untuk melakukan ini karena beberapa proses lain harus meluncurkan python untuk menjalankan solusi Anda. Setiap platform akan memiliki satu atau dua puluh cara berbeda untuk meluncurkan proses dan memantau perkembangannya. Pada platform unix, cron adalah standar lama. Di Mac OS X ada juga launchd, yang menggabungkan peluncuran mirip cron dengan fungsionalitas watchdog yang dapat menjaga proses Anda tetap hidup jika itu yang Anda inginkan. Setelah python berjalan, maka Anda dapat menggunakan modul sched untuk menjadwalkan tugas.
sumber
Saya tahu ada banyak jawaban, tetapi solusi lain adalah dengan dekorator . Ini adalah contoh untuk mengulangi fungsi setiap hari pada waktu tertentu. Pikiran keren tentang menggunakan cara ini adalah Anda hanya perlu menambahkan Gula Sintaksis ke fungsi yang ingin Anda jadwalkan:
Dan dekorator akan terlihat seperti:
sumber
Solusi Brian bekerja dengan cukup baik. Namun, seperti yang orang lain tunjukkan, ada bug yang tidak kentara dalam menjalankan kode. Juga saya merasa terlalu rumit untuk kebutuhan.
Berikut ini adalah alternatif yang lebih sederhana dan fungsional untuk menjalankan kode jika ada yang membutuhkannya:
sumber
Solusi sepele lainnya adalah:
Dan aqcron kelas. Itu adalah:
sumber
Jika Anda mencari penjadwal terdistribusi, Anda dapat melihat https://github.com/sherinkurian/mani - itu memang perlu redis, jadi mungkin bukan yang Anda cari. (perhatikan bahwa saya penulisnya) ini dibuat untuk memastikan toleransi kesalahan dengan menjalankan jam di lebih dari satu simpul.
sumber
Saya tidak tahu apakah sesuatu seperti itu sudah ada. Akan mudah untuk menulis sendiri dengan waktu, modul waktu dan / atau modul kalender, lihat http://docs.python.org/library/time.html
Satu-satunya kekhawatiran untuk solusi python adalah bahwa kebutuhan tugas Anda untuk selalu berjalan dan mungkin secara otomatis "dibangkitkan" setelah reboot, sesuatu yang Anda lakukan perlu mengandalkan sistem solusi tergantung.
sumber
Anda dapat memeriksa PiCloud [1] Crons [2], tetapi perhatikan bahwa pekerjaan Anda tidak akan berjalan di mesin Anda sendiri. Ini juga merupakan layanan yang harus Anda bayar jika Anda menggunakan lebih dari 20 jam waktu komputasi sebulan.
[1] http://www.picloud.com
[2] http://docs.picloud.com/cron.html
sumber
Metode Crontab di Server.
Nama file python hello.py
Langkah1: Buat file sh, beri nama s.sh
Langkah2: Buka Crontab Editor
Langkah 3: Tambahkan Jadwal Waktu
Gunakan Pemformatan Crontab
Cron ini akan menjalankan "Pada menit 2."
sumber
Saya suka bagaimana paket pycron menyelesaikan masalah ini.
sumber