Поэтому я работал над этой задачей python, где я буду загружать фотографии из reddit и загружать их снова в ig, и я пытаюсь сделать процесс загрузки и загрузки симуляционным. Я использую многопроцессорность для этого.
Однако начнется только мой первый процесс...
Здесь "полный" код:
def main(argv):
timer = 15
username = ''
password = ''
caption = ''
filecontainer = ''
isset = 0
redisset = 0
redname = ''
redsort = 'new'
redtimer = 1
redscore = 50
redmax = 40
redre = False
try:
opts, args = getopt.getopt(argv, "hr:t:u:p:c:f:", ["reddit=", "red=", "redditname=", "freshtimer=","top","new","hot", "score=", "max=","overwrite"])
except getopt.GetoptError:
print('this.py -t <time in minutes> -u <ig-username> -p <ig-password> -c <captionContainer> -f <path to filecontainer>')
sys.exit(2)
for opt, arg in opts:
## Just some getopt stuff here...
if isset == 4: #isset is just a way of testing if every arg was set.
mainprozess = Process(target = runUpload(timer,username,password,caption,filecontainer))
mainprozess.start()
mainprozess.join()
rdprozess = Process(target = getReddit(filecontainer,redname,redtimer,redmax,redscore,redsort,redre))
rdprozess.start()
rdprozess.join()
else:
print('you need to set all args')
print('this.py -t <time in minutes(only INTEGER!!!)> -u <ig-username> -p <ig-password> -c <caption> -f <path to filecontainer>')
sys.exit(1)
def runUpload(timer,username,password,caption,filecontainer):
#search for images in filecontainer
allFiles = []
while len(allFiles) <= 1:
allFiles = [f for f in os.listdir(filecontainer) if os.path.isfile(os.path.join(filecontainer, f))]
time.sleep(15)
print("no files found...\nwaiting for files")
r = random.randint(0,100)
if r <= 100: #80% chance to post just an image
postOK = postImage(allFiles,filecontainer,caption,username,password)
#elif r >= 80: #20% chance to post an album
# postOK = postAlbum(allFiles,filecontainer,caption,username,password)
if postOK == True:
#delete old
time.sleep(random.randint(5,45))
#deleteOld(username,password,deleteAfter=100,staticPosts=12)
print('\nsleeping for the next '+str(timer)+'minutes...\n')
waittime = timer*30 + (random.randint(-60,60))
i = 0
while i < waittime:
time.sleep(2)
print(str((waittime*2-i*2)//60)+' min && '+str((waittime*2-i*2)%60)+' sec')
i += 1
#time.sleep(timer*60)
runUpload(timer,username,password,caption,filecontainer)
else:
i = 0
while i < 10:
time.sleep(2)
print('.')
i += 1
print("an error ocurred\nretrying")
del allFiles[allFiles.index(randomFile)]
try:
os.remove(os.path.join(filecontainer,randomFile))
except Exception as e:
pass
runUpload(timer,username,password,caption,filecontainer)
if __name__ == "__main__":
freeze_support()
main(sys.argv[1:])
Но сосредоточьтесь на этой части:
mainprozess = Process(target = runUpload(timer,username,password,caption,filecontainer))
mainprozess.start()
mainprozess.join()
rdprozess = Process(target = getReddit(filecontainer,redname,redtimer,redmax,redscore,redsort,redre))
rdprozess.start()
rdprozess.join()
Добавлено: также, если я изменю его, он начнет только первый
Я не знаю, почему и как это исправить... Надеюсь, у вас есть предложения и хороший день.
ОБНОВЛЕНИЕ: О, дерьмо, я сам это исправил!
Нет, оказывается, я просто глуп...
По-видимому, я всегда вызывал функцию вместо того, чтобы помещать цель в процесс, потому что аргументы должны быть в дополнительном аргументе.
Здесь исправление:
mainprozess = Process(target = runUpload,args=[timer,username,password,caption,filecontainer])
rdprozess = Process(target = getReddit,args=[filecontainer,redname,redtimer,redmax,redscore,redsort,redre])
mainprozess.start()
rdprozess.start()
mainprozess.join()
rdprozess.join()
Ха, это то, что два года обучения программирования вам...
Мне жаль
О, дерьмо, я исправил это сам!
Нет, оказывается, я просто глуп...
По-видимому, я всегда вызывал функцию вместо того, чтобы помещать цель в процесс, потому что аргументы должны быть в дополнительном аргументе.
Здесь исправление:
mainprozess = Process(target = runUpload,args=[timer,username,password,caption,filecontainer])
rdprozess = Process(target = getReddit,args=[filecontainer,redname,redtimer,redmax,redscore,redsort,redre])
mainprozess.start()
rdprozess.start()
mainprozess.join()
rdprozess.join()
Ха, это то, что два года обучения программирования вам...
Мне жаль
Перенесите первое join()
в нижнюю часть кода. join()
означает "дождаться завершения". Итак, первый процесс заканчивается, прежде чем вы начнете второй.
Вместо этого сделайте что-нибудь вроде
mainprozess.start()
rdprozess.start()
mainprozess.join()
rdprozess.join()