pygridtools / gridmap

Easily map Python functions onto a cluster using a DRMAA-compatible grid engine like Sun Grid Engine (SGE).
GNU General Public License v3.0
83 stars 34 forks source link

Error: too many values to unpack (expected 2) #86

Open RuABraun opened 4 years ago

RuABraun commented 4 years ago

Python 3.7.6, running example:

sending function jobs to cluster

Traceback (most recent call last):
  File "testb.py", line 113, in <module>
    main()
  File "testb.py", line 105, in main
    job_outputs = process_jobs(functionJobs, max_processes=4)
  File "/idiap/temp/rbraun/programs/anaconda3/lib/python3.7/site-packages/gridmap/job.py", line 887, in process_jobs
    with JobMonitor(temp_dir=temp_dir) as monitor:
  File "/idiap/temp/rbraun/programs/anaconda3/lib/python3.7/site-packages/gridmap/job.py", line 299, in __init__
    for _, _, _, _, (ip, _) in getaddrinfo(getfqdn(), 0):
ValueError: too many values to unpack (expected 2)

I fixed it by changing the code to

for _, _, _, _, tpl in getaddrinfo(getfqdn(), 0):
    if len(tpl) > 2:
        continue
    ip = tpl[0]
mulhod commented 4 years ago

@RuABraun Thanks for filing this issue. I see you are indeed correct as the get_addrinfo function will return 5-tuples with the last element being either a 2-tuple or a 4-tuple, the latter of which we are not handling correctly. However, I think we should be filtering on AF_INET (which corresponds to the 2-tuple), e.g.

# from socket import AF_INET
for _, _, _, _, (ip, _) in getaddrinfo(getfqdn(), 0, AF_INET):
    ...

This way, the unpacking that assigns to the ip variable will be left intact. It is more readable, in my opinion.

@RuABraun Do you think this makes sense? And, if you are able to try with this instead, it would be much appreciated. I'd like to know that it works for you.