Ich versuche, einige zufällig ausgesät Zeiten zu erzeugen, mein Skript zu sagen, wenn jedes der Skripte aus einem Haupt-Skript zu schießen.Zeiten für Skripte beginnen auf einen bestimmten Zeitraum in Python laufen basiert
ich einen Zeitrahmen von einstellen wollen:
START_TIME = "02:00"
END_TIME = "03:00"
Wenn es um die Startzeit erreicht, muss es an, wie viele Skripte suchen wir laufen müssen:
script1.do_proc()
script2.alter()
script3.noneex()
In diesem Fall gibt es 3 zu laufen, so braucht es drei randomisierten Zeiten zu erzeugen, um diese Skripte mit einer Minimum Trennung von 5 Minuten zwischen jedem Skript zu starten, aber die Zeiten innerhalb der Zeit in START_TIME
und END_TIME
eingestellt sein muss
Aber es muss auch wissen, dass script1.main
immer das erste Skript zu schießen, können andere Skripte um (random) gemischt werden
So konnten wir möglicherweise script1
um 01:43 Uhr laufen und dann script3
läuft an 01.55 und dann script2
könnte um 02:59
laufen möglicherweise script3
läuft script1
um 01:35 Uhr läuft und dann um 01:45 Uhr und dann script2
könnte um 01:45 Uhr Wir könnten auch haben laufen, die auch in Ordnung ist.
Mein Skript so weit unten zu finden:
import random
import pytz
from time import sleep
from datetime import datetime
import script1
import script2
import script3
START_TIME = "01:21"
END_TIME = "03:00"
while 1:
try:
# Set current time & dates for GMT, London
CURRENT_GMTTIME = datetime.now(pytz.timezone('Europe/London')).strftime("%H%M")
CURRENT_GMTDAY = datetime.now(pytz.timezone('Europe/London')).strftime("%d%m%Y")
sleep(5)
# Grab old day for comparisons
try:
with open("DATECHECK.txt", 'rb') as DATECHECK:
OLD_DAY = DATECHECK.read()
except IOError:
with open("DATECHECK.txt", 'wb') as DATECHECK:
DATECHECK.write("0")
OLD_DAY = 0
# Check for new day, if it's a new day do more
if int(CURRENT_GMTDAY) != int(OLD_DAY):
print "New Day"
# Check that we are in the correct period of time to start running
if int(CURRENT_GMTTIME) <= int(START_TIME.replace(":", "")) and int(CURRENT_GMTTIME) >= int(END_TIME.replace(":", "")):
print "Correct time, starting"
# Unsure how to seed the start times for the scripts below
script1.do_proc()
script2.alter()
script3.noneex()
# Unsure how to seed the start times for above
# Save the current day to prevent it from running again today.
with open("DATECHECK.txt", 'wb') as DATECHECK:
DATECHECK.write(CURRENT_GMTDAY)
print "Completed"
else:
pass
else:
pass
except Exception:
print "Error..."
sleep(60)
EDIT 31/03/2016
Lasst uns sagen, dass ich hinzufügen, die folgende
SCRIPTS = ["script1.test()", "script2.test()", "script3.test()"]
MAIN_SCRIPT = "script1.test()"
TIME_DIFFERENCE = datetime.strptime(END_TIME, "%H:%M") - datetime.strptime(START_TIME, "%H:%M")
TIME_DIFFERENCE = TIME_DIFFERENCE.seconds
- Wir haben jetzt die die Anzahl der Skripte
- Wir haben die Liste des Skript ausführen zu laufen.
- wir den Namen des Haupt-Skript haben, auf die eine erste laufen.
- Wir haben die Zeit in Sekunden, wie viel Zeit wir in alle Skripte auszuführen haben insgesamt zu zeigen.
Sicherlich gibt es einen Weg, eine Art Schleife nur anschließen kann, um sie zu machen alles tun ..
for i in range(len(SCRIPTS))
, die 3fache
- 3 Samen erzeugen, wobei das Minimum um sicherzustellen, Es ist von
300
und alle zusammen die drei Samen darf nicht mehr alsTIME_DIFFERENCE
- die Startzeit auf
RUN_TIME = START_TIME
Basis erstellen und dannRUN_TIME = RUN_TIME + SEED[i]
- Erste Schleife woul d überprüfe, dass
MAIN_SCRIPT
innerhalbSCRIPTS
existiert, wenn es dann das Skript zuerst ausführen würde, lösche es sich vonSCRIPTS
und dann auf nächsten Schleifen, da es inSCRIPTS
nicht existiert, würde es wahllos auf eines der anderen Skripte wechseln.obwohl
die Zeiten Seeding
Die folgende scheint zu funktionieren, könnte es einen einfacheren Weg, dies zu tun sein.
CALCULATE_SEEDS = 0
NEW_SEED = 0
SEEDS_SUCESSS = False
SEEDS = []
while SEEDS_SUCESSS == False:
# Generate a new seed number
NEW_SEED = random.randrange(0, TIME_DIFFERENCE)
# Make sure the seed is above the minimum number
if NEW_SEED > 300:
SEEDS.append(NEW_SEED)
# Make sure we have the same amount of seeds as scripts before continuing.
if len(SEEDS) == len(SCRIPTS):
# Calculate all of the seeds together
for SEED in SEEDS:
CALCULATE_SEEDS += SEED
# Make sure the calculated seeds added together is smaller than the total time difference
if CALCULATE_SEEDS >= TIME_DIFFERENCE:
# Reset and try again if it's not below the number
SEEDS = []
else:
# Exit while loop if we have a correct amount of seeds with minimum times.
SEEDS_SUCESSS = True
ist die Anzahl der Skripts ändern, ich meine, es ist nicht 3 oder 4, aber kann mehr sein? – minhhn2910
@ minhhn2910 ja, tut es. Gibt es eine Möglichkeit, Funktionen in ein Array zu setzen, um herauszufinden, wie viele Seeds ich brauche & die Skripte zu mischen (außer script1) – Ryflex
Welches Betriebssystem benutzen Sie? – minhhn2910