Вам нужен пул рабочих процессов - даже если вам нужен сценарий, мне действительно интересно, не хватит ли потоков (или multiprocessing.dummy).
Пул запускает запрошенное количество рабочихпроцессов, и вы можете отправлять асинхронные задачи в пул, который будет обрабатываться первой бесплатной обработкой.
Урезанная версия вашего примера (не нужно печатать, не нужно читать последовательный файл в списке)может быть:
import multiprocessing
import time
def runit(prod, email):
print("Profile-" + str(prod) + ' - ' + email)
#From here I can then use the email for each worker basically. Or thats the plan atleast. Theplan is that every worker will have its own email that can be used in here.
# sys.exit() # NEVER CALL EXPLICITELY sys.exit() in a worker process
time.sleep(1) # to add a delay inside each task
def main():
while True:
try:
HowManyThread = int(input(
'How many tasks do you wanna run? [NUMBERS] \n'))
except ValueError:
print("Stop being stupid")
continue
if HowManyThread == 0: break
pool = multiprocessing.Pool(HowManyThread)
with open('email.txt') as f:
for i, email in enumerate(f):
email = email.strip()
# runit will be runned by a worker process
pool.apply_async(runit, (i, email))
pool.close() # no more task to add
pool.join() # wait for last worker to end
if __name__ == "__main__":
main()