I've tried everything I could think of, but I can not figure out why the following multiprocessing code will not start the loop:
import sqlite3, itertools # Dummy table conn = sqlite3.connect(":memory:") conn.execute('CREATE TABLE numbers (num integer)') conn.executemany("INSERT INTO numbers VALUES (?)", ((x,) for x in range(5))) conn.commit() cmd_search = "SELECT * FROM numbers" cursor = conn.execute(cmd_search) def nothing(x): return x import multiprocessing P = multiprocessing.Pool() #ITR = P.imap(nothing,cursor) # parallel version ITR = itertools.imap(nothing, cursor) # serial version for x in ITR: print x
When I run it with the "serial" version (using
itertools.imap) I get the expected output of
(0,) (1,) (2,) (3,) (4,). Using the
multiprocessing.imap version, I get nothing and the loop exits silently. I clearly has to do with the sqlite cursor, switching to
Why won't multiprocessing work here?