executor.map() TypeError: zip argument #2 must support iteration

I

iMath

executor.map() TypeError: zip argument #2 must support iteration

when I run it ,just generated TypeError: zip argument #2 must support iteration.
can anyone help me fix this problem ?

import time, concurrent.futures
lst100=[i for i in range(100)]

t1=time.clock()
print(list(map(str,lst100)))
t2=time.clock()
print(t2-t1)

t3=time.clock()
with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
future_to_url = executor.map(str,lst100, 60)
print(list(future_to_url))
t4=time.clock()
print(t4-t3)
 
S

Steven D'Aprano

executor.map() TypeError: zip argument #2 must support iteration

when I run it ,just generated TypeError: zip argument #2 must support
iteration. can anyone help me fix this problem ?

Yes. Read the error message, and inspect the line that is in error. You
have:
future_to_url = executor.map(str,lst100, 60)

executor.map has three arguments:

Arg 0: str
Arg 1: list of 100 ints
Arg 2: int 60

Argument 2, the number 60, does not support iteration, since it is an int.

Now read the docs for map. At the interactive interpreter, do this:

py> from concurrent.futures import ThreadPoolExecutor
py> help(ThreadPoolExecutor.map)


and you will see the following documentation:

map(self, fn, *iterables, timeout=None)
Returns a iterator equivalent to map(fn, iter).

Args:
fn: A callable that will take take as many arguments as there are
passed iterables.
timeout: The maximum number of seconds to wait. If None, then
there is no limit on the wait time.


Notice that the iterables argument is prefixed with * symbol. That means
that it collects all the remaining positional arguments, which means that
the timeout argument is keyword only.

So try this:


future_to_url = executor.map(str, lst100, timeout=60)
 
I

iMath

在 2013å¹´4月1日星期一UTC+8下åˆ3æ—¶48分34秒,Steven D'Aprano写é“:
Yes. Read the error message, and inspect the line that is in error. You

have:






executor.map has three arguments:



Arg 0: str

Arg 1: list of 100 ints

Arg 2: int 60



Argument 2, the number 60, does not support iteration, since it is an int..



Now read the docs for map. At the interactive interpreter, do this:



py> from concurrent.futures import ThreadPoolExecutor

py> help(ThreadPoolExecutor.map)





and you will see the following documentation:



map(self, fn, *iterables, timeout=None)

Returns a iterator equivalent to map(fn, iter).



Args:

fn: A callable that will take take as many arguments as there are

passed iterables.

timeout: The maximum number of seconds to wait. If None, then

there is no limit on the wait time.





Notice that the iterables argument is prefixed with * symbol. That means

that it collects all the remaining positional arguments, which means that

the timeout argument is keyword only.



So try this:





future_to_url = executor.map(str, lst100, timeout=60)

thanks for clarification.I thought argument 2 is lst100
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,022
Latest member
MaybelleMa

Latest Threads

Top