Home > Back-end >  Python pass arguments from a .csv file to threads
Python pass arguments from a .csv file to threads

Time:05-25

the csv:

email,password
[email protected],SuperSecretpassword123!
[email protected],SuperSecretpassword123!
[email protected],SuperSecretpassword123!
[email protected],SuperSecretpassword123!

the example printing function

def start_printer(row):
    email = row["email"]
    password = row["password"]

    print(f"{email}:{password}")

the threading starting example

                number_of_threads = 10

                for _ in range(number_of_threads):
                    t = Thread(target=start_printer, args=(row,))
                    time.sleep(0.1)
                    t.start()
                    threads.append(t)
                for t in threads:
                    t.join()

how do I pass the values from the csv to the threading example?

CodePudding user response:

I guess you could go about it this way:

from threading import Thread
from csv import DictReader

def returnPartionedList(inputlist: list, x: int = 100) -> list: # returns inputlist split into x parts, default is 100
    return([inputlist[i:i   x] for i in range(0, len(inputlist), x)])

def start_printer(row) -> None:
    email: str = row["email"]
    password: str = row["password"]
    print(f"{email}:{password}")

def main() -> None:
    path: str = r"tasks.csv"
    list_tasks: list = []
    with open(path) as csv_file:
        csv_reader: DictReader = DictReader(csv_file, delimiter=',')
        for row in csv_reader:
            list_tasks.append(row)
    list_tasks_partitions: list = returnPartionedList(list_tasks, 10) # Run 10 threads per partition
    for partition in list_tasks_partitions:
        threads: list = [Thread(target=start_printer, args=(row,)) for row in partition]
        for t in threads:
            t.start()
            t.join()

if __name__ == "__main__":
    main()

Result:

[email protected]:SuperSecretpassword123!
[email protected]:SuperSecretpassword123!
[email protected]:SuperSecretpassword123!
[email protected]:SuperSecretpassword123!
  • Related