Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 8ace2c6

Browse files
committed
Merge 3.5 (Issue #27041)
2 parents 7c3ac2d + 7661db6 commit 8ace2c6

14 files changed

Lines changed: 55 additions & 39 deletions

Lib/asyncio/base_events.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ def _wakeup(self):
209209
def wait_closed(self):
210210
if self.sockets is None or self._waiters is None:
211211
return
212-
waiter = futures.Future(loop=self._loop)
212+
waiter = self._loop.create_future()
213213
self._waiters.append(waiter)
214214
yield from waiter
215215

@@ -243,6 +243,10 @@ def __repr__(self):
243243
% (self.__class__.__name__, self.is_running(),
244244
self.is_closed(), self.get_debug()))
245245

246+
def create_future(self):
247+
"""Create a Future object attached to the loop."""
248+
return futures.Future(loop=self)
249+
246250
def create_task(self, coro):
247251
"""Schedule a coroutine object.
248252
@@ -537,7 +541,7 @@ def run_in_executor(self, executor, func, *args):
537541
assert not args
538542
assert not isinstance(func, events.TimerHandle)
539543
if func._cancelled:
540-
f = futures.Future(loop=self)
544+
f = self.create_future()
541545
f.set_result(None)
542546
return f
543547
func, args = func._callback, func._args
@@ -580,7 +584,7 @@ def getaddrinfo(self, host, port, *,
580584
family=0, type=0, proto=0, flags=0):
581585
info = _ipaddr_info(host, port, family, type, proto)
582586
if info is not None:
583-
fut = futures.Future(loop=self)
587+
fut = self.create_future()
584588
fut.set_result([info])
585589
return fut
586590
elif self._debug:
@@ -721,7 +725,7 @@ def create_connection(self, protocol_factory, host=None, port=None, *,
721725
def _create_connection_transport(self, sock, protocol_factory, ssl,
722726
server_hostname):
723727
protocol = protocol_factory()
724-
waiter = futures.Future(loop=self)
728+
waiter = self.create_future()
725729
if ssl:
726730
sslcontext = None if isinstance(ssl, bool) else ssl
727731
transport = self._make_ssl_transport(
@@ -841,7 +845,7 @@ def create_datagram_endpoint(self, protocol_factory,
841845
raise exceptions[0]
842846

843847
protocol = protocol_factory()
844-
waiter = futures.Future(loop=self)
848+
waiter = self.create_future()
845849
transport = self._make_datagram_transport(
846850
sock, protocol, r_addr, waiter)
847851
if self._debug:
@@ -980,7 +984,7 @@ def create_server(self, protocol_factory, host=None, port=None,
980984
@coroutine
981985
def connect_read_pipe(self, protocol_factory, pipe):
982986
protocol = protocol_factory()
983-
waiter = futures.Future(loop=self)
987+
waiter = self.create_future()
984988
transport = self._make_read_pipe_transport(pipe, protocol, waiter)
985989

986990
try:
@@ -997,7 +1001,7 @@ def connect_read_pipe(self, protocol_factory, pipe):
9971001
@coroutine
9981002
def connect_write_pipe(self, protocol_factory, pipe):
9991003
protocol = protocol_factory()
1000-
waiter = futures.Future(loop=self)
1004+
waiter = self.create_future()
10011005
transport = self._make_write_pipe_transport(pipe, protocol, waiter)
10021006

10031007
try:

Lib/asyncio/base_subprocess.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ def _wait(self):
228228
if self._returncode is not None:
229229
return self._returncode
230230

231-
waiter = futures.Future(loop=self._loop)
231+
waiter = self._loop.create_future()
232232
self._exit_waiters.append(waiter)
233233
return (yield from waiter)
234234

Lib/asyncio/events.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,9 @@ def call_at(self, when, callback, *args):
266266
def time(self):
267267
raise NotImplementedError
268268

269+
def create_future(self):
270+
raise NotImplementedError
271+
269272
# Method scheduling a coroutine object: create a task.
270273

271274
def create_task(self, coro):

Lib/asyncio/futures.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,8 @@ def wrap_future(future, *, loop=None):
451451
return future
452452
assert isinstance(future, concurrent.futures.Future), \
453453
'concurrent.futures.Future is expected, got {!r}'.format(future)
454-
new_future = Future(loop=loop)
454+
if loop is None:
455+
loop = events.get_event_loop()
456+
new_future = loop.create_future()
455457
_chain_future(future, new_future)
456458
return new_future

Lib/asyncio/locks.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def acquire(self):
170170
self._locked = True
171171
return True
172172

173-
fut = futures.Future(loop=self._loop)
173+
fut = self._loop.create_future()
174174
self._waiters.append(fut)
175175
try:
176176
yield from fut
@@ -258,7 +258,7 @@ def wait(self):
258258
if self._value:
259259
return True
260260

261-
fut = futures.Future(loop=self._loop)
261+
fut = self._loop.create_future()
262262
self._waiters.append(fut)
263263
try:
264264
yield from fut
@@ -320,7 +320,7 @@ def wait(self):
320320

321321
self.release()
322322
try:
323-
fut = futures.Future(loop=self._loop)
323+
fut = self._loop.create_future()
324324
self._waiters.append(fut)
325325
try:
326326
yield from fut
@@ -433,7 +433,7 @@ def acquire(self):
433433
True.
434434
"""
435435
while self._value <= 0:
436-
fut = futures.Future(loop=self._loop)
436+
fut = self._loop.create_future()
437437
self._waiters.append(fut)
438438
try:
439439
yield from fut

Lib/asyncio/proactor_events.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ def sock_connect(self, sock, address):
444444
try:
445445
base_events._check_resolved_address(sock, address)
446446
except ValueError as err:
447-
fut = futures.Future(loop=self)
447+
fut = self.create_future()
448448
fut.set_exception(err)
449449
return fut
450450
else:

Lib/asyncio/queues.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def put(self, item):
128128
This method is a coroutine.
129129
"""
130130
while self.full():
131-
putter = futures.Future(loop=self._loop)
131+
putter = self._loop.create_future()
132132
self._putters.append(putter)
133133
try:
134134
yield from putter
@@ -162,7 +162,7 @@ def get(self):
162162
This method is a coroutine.
163163
"""
164164
while self.empty():
165-
getter = futures.Future(loop=self._loop)
165+
getter = self._loop.create_future()
166166
self._getters.append(getter)
167167
try:
168168
yield from getter

Lib/asyncio/selector_events.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ def _accept_connection2(self, protocol_factory, conn, extra,
196196
transport = None
197197
try:
198198
protocol = protocol_factory()
199-
waiter = futures.Future(loop=self)
199+
waiter = self.create_future()
200200
if sslcontext:
201201
transport = self._make_ssl_transport(
202202
conn, protocol, sslcontext, waiter=waiter,
@@ -314,7 +314,7 @@ def sock_recv(self, sock, n):
314314
"""
315315
if self._debug and sock.gettimeout() != 0:
316316
raise ValueError("the socket must be non-blocking")
317-
fut = futures.Future(loop=self)
317+
fut = self.create_future()
318318
self._sock_recv(fut, False, sock, n)
319319
return fut
320320

@@ -352,7 +352,7 @@ def sock_sendall(self, sock, data):
352352
"""
353353
if self._debug and sock.gettimeout() != 0:
354354
raise ValueError("the socket must be non-blocking")
355-
fut = futures.Future(loop=self)
355+
fut = self.create_future()
356356
if data:
357357
self._sock_sendall(fut, False, sock, data)
358358
else:
@@ -395,7 +395,7 @@ def sock_connect(self, sock, address):
395395
"""
396396
if self._debug and sock.gettimeout() != 0:
397397
raise ValueError("the socket must be non-blocking")
398-
fut = futures.Future(loop=self)
398+
fut = self.create_future()
399399
try:
400400
base_events._check_resolved_address(sock, address)
401401
except ValueError as err:
@@ -453,7 +453,7 @@ def sock_accept(self, sock):
453453
"""
454454
if self._debug and sock.gettimeout() != 0:
455455
raise ValueError("the socket must be non-blocking")
456-
fut = futures.Future(loop=self)
456+
fut = self.create_future()
457457
self._sock_accept(fut, False, sock)
458458
return fut
459459

Lib/asyncio/streams.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def _drain_helper(self):
210210
return
211211
waiter = self._drain_waiter
212212
assert waiter is None or waiter.cancelled()
213-
waiter = futures.Future(loop=self._loop)
213+
waiter = self._loop.create_future()
214214
self._drain_waiter = waiter
215215
yield from waiter
216216

@@ -449,7 +449,7 @@ def _wait_for_data(self, func_name):
449449
self._paused = False
450450
self._transport.resume_reading()
451451

452-
self._waiter = futures.Future(loop=self._loop)
452+
self._waiter = self._loop.create_future()
453453
try:
454454
yield from self._waiter
455455
finally:

Lib/asyncio/tasks.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ def wait_for(fut, timeout, *, loop=None):
373373
if timeout is None:
374374
return (yield from fut)
375375

376-
waiter = futures.Future(loop=loop)
376+
waiter = loop.create_future()
377377
timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
378378
cb = functools.partial(_release_waiter, waiter)
379379

@@ -406,7 +406,7 @@ def _wait(fs, timeout, return_when, loop):
406406
The fs argument must be a collection of Futures.
407407
"""
408408
assert fs, 'Set of Futures is empty.'
409-
waiter = futures.Future(loop=loop)
409+
waiter = loop.create_future()
410410
timeout_handle = None
411411
if timeout is not None:
412412
timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
@@ -507,7 +507,9 @@ def sleep(delay, result=None, *, loop=None):
507507
yield
508508
return result
509509

510-
future = futures.Future(loop=loop)
510+
if loop is None:
511+
loop = events.get_event_loop()
512+
future = loop.create_future()
511513
h = future._loop.call_later(delay,
512514
futures._set_result_unless_cancelled,
513515
future, result)
@@ -604,7 +606,9 @@ def gather(*coros_or_futures, loop=None, return_exceptions=False):
604606
be cancelled.)
605607
"""
606608
if not coros_or_futures:
607-
outer = futures.Future(loop=loop)
609+
if loop is None:
610+
loop = events.get_event_loop()
611+
outer = loop.create_future()
608612
outer.set_result([])
609613
return outer
610614

@@ -692,7 +696,7 @@ def shield(arg, *, loop=None):
692696
# Shortcut.
693697
return inner
694698
loop = inner._loop
695-
outer = futures.Future(loop=loop)
699+
outer = loop.create_future()
696700

697701
def _done_callback(inner):
698702
if outer.cancelled():

0 commit comments

Comments
 (0)