Retrieving Log#
Note
New in version 0.5.2, only available for distributed scheduler.
For a distributed setting, the log output in custom functions, for instance,
submitted via mars.remote.spawn
, will not reveal on client,
Users may have to login to the workers to see the log.
Hence, fetch_log
API is used to retrieve the log to client for display purpose.
For example, we define a function called calculate
.
>>> import mars
>>> # create a distributed session
>>> mars.new_session('http://<ip>:<port>')
>>>
>>> import mars.remote as mr
>>> def calculate(x):
>>> acc = 0
>>> for i in range(x):
>>> acc += i
>>> print(acc)
>>> return acc
Then we trigger the execution, we can see that no output can be revealed just like expected.
>>> r = mr.spawn(calculate, 10)
>>> r.execute()
Object <op=RemoteFunction, key=67b91ee22e4153107c615797bdb6c189>
>>> r.fetch()
45
You can use r.fetch_log()
to retrieve the output.
>>> print(r.fetch_log())
0
1
3
6
10
15
21
28
36
45
>>> print(r.fetch_log()) # call fetch_log again will continue to fetch
>>> print(r.fetch_log(offsets=0)) # set offsets=0 to retrieve from beginning
0
1
3
6
10
15
21
28
36
45
Combining asynchronous execution with fetch_log
,
it’s able to retrieve log continuously during running.
>>> import time
>>> def c_calc():
>>> for i in range(10):
>>> time.sleep(1)
>>> print(i)
>>>
>>> r = mr.spawn(c_calc)
>>>
>>> def run():
>>> f = r.execute(wait=False)
>>> while not f.done():
>>> time.sleep(0.5)
>>> log = str(r.fetch_log()).strip()
>>> if log:
>>> print(log)
>>>
>>> run()
0
1
2
3
4
5
6
7
8
9