pythonparallel-processingmultiprocessing

Multiprocessing in Python: execute two functions at the exact same time


I want to execute the following two functions at exactly the same time.

from multiprocessing import Process
import os
import datetime

def func_1(title):
    now = datetime.datetime.now()
    print "hello, world"
    print "Current second: %d" % now.second
    print "Current microsecond: %d" % now.microsecond

def func_2(name):
    func_1('function func_2')
    now = datetime.datetime.now()
    print "Bye, world"
    print "Current second: %d" % now.second
    print "Current microsecond: %d" % now.microsecond

if __name__ == '__main__':
    p = Process(target=func_2, args=('bob',))
    p.start()
    p.join()

And I am getting a difference in microseconds. Is there any way to execute both at the exact same time? Any help would be appreciated.


Solution

  • On the computer the following was written on, this code consistently prints out the same timestamps:

    #! /usr/bin/env python3
    from multiprocessing import Barrier, Lock, Process
    from time import time
    from datetime import datetime
    
    def main():
        synchronizer = Barrier(2)
        serializer = Lock()
        Process(target=test, args=(synchronizer, serializer)).start()
        Process(target=test, args=(synchronizer, serializer)).start()
    
    def test(synchronizer, serializer):
        synchronizer.wait()
        now = time()
        with serializer:
            print(datetime.fromtimestamp(now))
    
    if __name__ == '__main__':
        main()