简体   繁体   中英

Python pass arguments from a .csv file to threads

the csv:

email,password
test0@test.com,SuperSecretpassword123!
test1@test.com,SuperSecretpassword123!
test2@test.com,SuperSecretpassword123!
test3@test.com,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?

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:

test0@test.com:SuperSecretpassword123!
test1@test.com:SuperSecretpassword123!
test2@test.com:SuperSecretpassword123!
test3@test.com:SuperSecretpassword123!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM