Você precisa colocar todo o código que usa multiprocessamento, dentro de sua própria função. Isso impede o lançamento recursiva de novos pools quando o multiprocessamento reimporta seu módulo em processos separados:
def parse_file(filename):
...
def main():
pool = mp.Pool(processes=8)
pool.map(parse_file, ['my_dir/' + filename for filename in os.listdir("my_dir")])
if __name__ == '__main__:
main()
Consulte a documentação sobre certificando-se de que seu módulo está importável , também o conselho para execução no Windows(tm)