Heavy! "National unified legal professional qualification examination implementation measures" issued.

  CCTV News:According to the website of the Ministry of Justice, the "Measures for the Implementation of the National Unified Legal Professional Qualification Examination" was considered and adopted at the ministerial meeting of the Ministry of Justice on April 25, 2018. It is hereby promulgated and shall come into force as of the date of promulgation. The full text is as follows: 

Measures for the implementation of the national unified legal professional qualification examination

(Promulgated by DecreeNo. 140th of the Ministry of Justice on April 28, 2018)

Chapter I General Principles

  the first In order to standardize the national unified legal professional qualification examination, these measures are formulated in accordance with the Judges Law of People’s Republic of China (PRC), Public Prosecutors Law of the People’s Republic of China, Civil Service Law of People’s Republic of China (PRC), Lawyers Law of People’s Republic of China (PRC), Notary Law of People’s Republic of China (PRC), Arbitration Law of People’s Republic of China (PRC), Administrative Reconsideration Law of People’s Republic of China (PRC), Administrative Punishment Law of the People’s Republic of China and relevant state regulations.

  the second The national unified legal professional qualification examination is a national examination organized by the state to select qualified legal professionals.

  Newly appointed judges, newly appointed prosecutors, applicants for practicing as lawyers, notaries and legal arbitrators for the first time, and civil servants in administrative organs who are engaged in the examination of administrative punishment decisions, administrative reconsideration, administrative rulings and legal advisers for the first time shall pass the national unified legal professional qualification examination and obtain legal professional qualifications.

  Except as otherwise provided by laws and administrative regulations.

  Article The national unified legal professional qualification examination shall be legal, fair and just.

  Article 4 The Ministry of Justice, together with the Supreme People’s Court, the Supreme People’s Procuratorate and other relevant departments and units, will form the National Coordinating Committee for Unified Legal Professional Qualification Examination, and hold consultations on major issues concerning the National Unified Legal Professional Qualification Examination.

  Article 5 The implementation of the national unified legal professional qualification examination shall be subject to supervision by supervisory organs, secret organs and the society.

Chapter II Examination Organization

  Article 6 The national unified legal professional qualification examination shall be implemented by the Ministry of Justice.

  Article 7 The judicial administrative organs of provinces, autonomous regions and municipalities directly under the Central Government shall specify specialized institutions to undertake the examination of the national unified legal professional qualification examination in accordance with relevant regulations.

  The judicial administrative organs at the municipal level divided into districts or districts (counties) of municipalities directly under the Central Government shall, under the supervision and guidance of the judicial administrative organs at higher levels, undertake the examination of the national unified legal professional qualification examination within their respective jurisdictions.

  Article 8 The judicial administrative organ responsible for organizing and implementing the examination and its examination staff shall strictly abide by the provisions of the state secrecy laws and regulations, and strengthen the secrecy management of the national unified legal professional qualification examination.

Chapter III Registration Conditions

  Article 9 Persons who meet the following conditions may sign up for the national unified legal professional qualification examination:

  (1) Having People’s Republic of China (PRC) nationality;

  (two) support the constitution of People’s Republic of China (PRC), enjoy the right to vote and be elected;

  (3) Having good political and professional qualities and moral conduct;

  (4) Having full capacity for civil conduct;

  (5) Having a bachelor’s degree in law from a full-time ordinary institution of higher learning and obtaining a bachelor’s degree or above; Bachelor degree or above in illegal science in full-time colleges and universities, and obtain master of law, master of law or above; Full-time colleges and universities have bachelor degree or above in illegal courses and obtained corresponding degrees, and have been engaged in legal work for three years.

  Article 10 Under any of the following circumstances, persons may not sign up for the national unified legal professional qualification examination:

  (1) Having received criminal punishment for intentional crime;

  (2) Having been expelled from public office or having had his lawyer’s practice certificate or notary’s practice certificate revoked;

  (three) the legal professional qualification certificate has been revoked;

  (four) being given two years not to sign up for the national unified legal professional qualification examination (national judicial examination), or being given life not to sign up for the national unified legal professional qualification examination (national judicial examination);

  (five) because of serious dishonesty, the relevant state units identified as the object of joint punishment for dishonesty and included in the national credit information sharing platform;

  (6) Being banned from engaging in legal professional treatment for life due to other circumstances.

  If a person under any of the circumstances specified in the preceding paragraph has gone through the registration formalities, the registration is invalid; Those who have already taken the exam will have invalid test results.

Chapter IV Contents and Methods of Examination

  Article 11 The specific examination time and related arrangements of the national unified legal professional qualification examination will be announced to the public three months before the examination is held.

  Article 12 The national unified legal professional qualification examination implements the national unified proposition.

  The content and proposition scope of the national unified legal professional qualification examination shall be subject to the Outline of the National Unified Legal Professional Qualification Examination published by the Ministry of Justice that year.

  Article 13 The national unified legal professional qualification examination is held once a year, which is divided into two parts: objective examination and subjective examination, and comprehensively examines the political literacy, professional ability and professional ethics that candidates should have in the legal profession.

  Candidates who pass the objective test can take the subjective test, and the objective test is valid in this year and the next test year.

  Article 14 The national unified legal professional qualification examination adopts paper-and-pencil examination or computerized examination.

  Article 15 The national unified legal professional qualification examination shall be marked by the whole country, and the qualified scores shall be determined uniformly. The examination results and qualified scores shall be announced by the Ministry of Justice.

Chapter V Disciplinary Treatment

  Article 16 Candidates who violate the examination discipline shall be given a verbal warning, ordered to leave the examination room and cancel the examination results, confirmed that the examination results of that year are invalid, and shall not sign up for the national unified legal professional qualification examination within two years according to the relevant provisions, depending on the circumstances and consequences; If it constitutes an intentional crime, it shall be given a lifelong ban on signing up for the national unified legal professional qualification examination.

  Candidates and other relevant personnel who violate the administration of public security shall be dealt with by the public security organs; If a crime is constituted, criminal responsibility shall be investigated by judicial organs according to law.

  Article 17 Examination staff who violate work discipline shall be punished according to the relevant provisions, depending on the circumstances and consequences; If a crime is constituted, criminal responsibility shall be investigated by judicial organs according to law.

Chapter VI Qualification Granting and Management

  Article 18 Persons who have passed the national unified legal professional qualification examination and do not have the circumstances specified in the first paragraph of Article 10 of these Measures may apply for granting legal professional qualifications in accordance with the prescribed procedures, and the Ministry of Justice will issue legal professional qualification certificates.

  Article 19 Where a legal professional qualification certificate is obtained by cheating, bribery or other improper means, the Ministry of Justice shall revoke the original decision to grant legal professional qualification and cancel its legal professional qualification certificate.

  Article 20 If a person who has obtained the legal professional qualification violates the Constitution and laws, obstructs judicial justice, violates professional ethics, etc., the judicial administrative organ shall, according to the relevant provisions of the Ministry of Justice, treat him accordingly according to his circumstances and consequences.

  Article 21 The judicial administrative organ shall record the relevant information of the personnel who have obtained the legal professional qualification and the relevant information of the personnel who have dealt with it according to Articles 19 and 20 of these Measures into the national legal professional qualification management system and publish it on the official website of the Ministry of Justice.

Chapter VII Supplementary Provisions

  Article 22 Before the implementation of these measures, graduates with bachelor’s degree or above in law major in institutions of higher learning who have obtained a student status (examination record) or obtained corresponding qualifications, or graduates with bachelor’s degree or above in illegal major in institutions of higher learning and have legal professional knowledge, can sign up for the national unified legal professional qualification examination.

  Article 23 The implementation of the national unified legal professional qualification examination may, within a certain period of time, appropriately relax the examination candidates in hard, remote and ethnic minority areas in terms of registration academic qualifications and examination qualification standards, and implement separate management of their legal professional qualifications. The specific measures shall be determined by the National Unified Legal Professional Qualification Examination Coordination Committee.

  Organize the national unified legal professional qualification examination in ethnic autonomous areas, and the candidates can use the national language to conduct the examination.

  Article 24 The provisions of these Measures shall apply to China citizens who are permanent residents of the Hong Kong Special Administrative Region and the Macao Special Administrative Region and residents of Taiwan Province who take the national unified legal professional qualification examination.

  Article 25 The specific rules for active servicemen to take the national unified legal professional qualification examination shall be formulated separately by the Ministry of Justice in conjunction with the Political and Legal Committee of the Central Military Commission.

  Article 26 Other policies and regulations of the national unified legal professional qualification examination shall be announced in the announcement of the annual national unified legal professional qualification examination after being determined by the national unified legal professional qualification examination coordination Committee.

  Article 27 The Ministry of Justice shall be responsible for the interpretation of these Measures.

  Article 28 These Measures shall come into force as of the date of promulgation.

"live in a room and don’t fry"! At least nine provinces and cities let the system land at the provincial level.

  Cctv newsGoverning the chaos in the real estate market is a major event that many cities have concentrated their firepower on recently. From the end of June, seven ministries and commissions issued documents to control the chaos in the real estate market in 30 cities, to the first case in China that the black intermediary gang committed the crime of organized crime of underworld nature, and news of cracking down on speculative real estate speculation and black intermediary in various places kept appearing in the media. In the past two months, at least 16 cities have successively issued detailed rules, and at least 9 provinces (cities) have implemented the system at the provincial level.

  9 provinces (cities) have implemented the system of controlling real estate chaos.

  The reporter observed that at least 16 cities have successively issued detailed rules since the documents of seven ministries were issued at the end of June, namelyChengdu, Hangzhou, Ningbo, Foshan, Kunming, Hefei, Nanjing, Suzhou, Wuxi, Xuzhou, Wuhan, Yichang, Taiyuan, Lanzhou and Guiyang.andShenzhen; At least nine provinces (cities) let the system fall from the provincial level, namelyChongqing, Shandong, Hubei, Zhejiang, Fujian, Yunnan, Heilongjiang, Jilin and Guizhou.

  From the focus of rectification, some of the relevant documents of these provinces and cities are consistent with those issued by seven ministries, but some have added or refined relevant contents according to their own characteristics.

  In view of the illegal behavior of real estate development enterprises, Kunming will"After obtaining the pre-sale permit of commercial housing, the real estate development enterprise failed to disclose all the saleable houses and pre-sale prices at one time within 10 days"Included in the scope of remediation. This provision has been mentioned in Chengdu, Hubei, Heilongjiang and other documents.

  Jilin, Heilongjiang and other provinces have also listed the situation that the supervisory duties are not in place as the key actions to be cracked down. As clearly stated in the document issued by Jilin Province on August 13, it is necessary to increase"The real estate market supervision responsibility is not fulfilled"The blow, including the ineffective regulation of the real estate market, failed to perform the real estate transaction management functions and real estate market supervision duties according to law; There is no online signing and filing of commercial housing and second-hand housing transaction contracts.

  There are different ways to crack down on illegal fund-raising in the real estate sector.

  Hubei: according to local characteristics, increase the scope of key attacks.

  The reporter noted that the "Work Plan for the Special Action to Control the Chaos in the Real Estate Market in Hubei Province" has added a lot of content on the basis of the documents of the ministries and commissions.

  For example, in cracking down on "black intermediaries", the focus of the crackdown has increased."Solicit business by concealment, fraud, coercion, bribery and other improper means, trick consumers into trading or force trading", "illegally collect fees other than the house price of the purchaser to speculate on the house number" and "solicit business by false housing and false price information"Etc.; In cracking down on violations of laws and regulations by housing enterprises, it has increased"If the pre-sale plan of commercial housing is put on record as a blank house, it will be sold in the form of fully renovated commercial housing without authorization"Wait for the content.

  Zhejiang: 10 departments jointly issued a document to control real estate chaos.

  On July 24th, Zhejiang Province issued the "Notice on Launching Special Actions to Combat Illegal Acts against the Interests of the Masses and Control the Chaos in the Real Estate Market", which was jointly issued by 10 departments. Compared with the notices issued by seven ministries and commissions, Zhejiang has also added a lot of contents according to local characteristics.

  For example, in combating "speculative real estate speculation", it has been added."Without obtaining relevant financial qualifications, engage in real estate financial business by using online platforms and equity crowdfunding platforms, or engage in relevant financial business in violation of regulations despite obtaining relevant financial qualifications"Terms; In the fight against "black intermediaries", new"instigating and assisting buyers to forge social security, tax payment, marriage, household registration and other certificates to avoid real estate control policies such as restricting purchases and loans"Terms.

  The notice issued by Zhejiang Province mentioned that:"It is necessary to seriously investigate and deal with all kinds of violations of laws and regulations. Depending on the seriousness of the case, cities can take written warnings, be included in the blacklist of real estate integrity, interview the person in charge, publicly expose, suspend online signing, suspend business for rectification, revoke qualifications and licenses, administrative penalties, and incorporate multi-sectoral joint punishment to implement various market restrictions."

  Chongqing: The public security department is deeply involved in rectifying the real estate chaos.

  Chongqing, which has joined the "judicial means", has also made great efforts to rectify it. The remediation plan jointly issued by the Municipal Bureau of Land and Housing Management and the Municipal Public Security Bureau has made Chongqing the first city among the above 30 cities to be deeply involved in joint law enforcement to rectify the chaos in the real estate market.

  There are nine key points in Chongqing’s rectification:

  Fabricating and spreading false information about real estate to disturb public order;

  The "speculative house number" is illegally profitable;

  Illegal fund-raising in the real estate sector;

  Forging official documents, certificates and supporting documents;

  Misappropriation and occupation of real estate transaction funds;

  "sell more in one room";

  Infringement of citizens’ personal information;

  Threatening personal safety;

  Suspected of disturbing public order, obstructing social management, infringing on personal rights and property rights and other illegal acts.

  Among them, the key points in the rectification of "threatening personal safety" are — — Development enterprises or intermediaries use threats, intimidation and other violent means to expel tenants, forcibly increase rents or maliciously deduct rents and deposits; Black and evil forces dominate the market and undermine the management order of the real estate industry.

  "This rectification, once the problem is found, is not a simple interview, fine. The deterrence of law enforcement will also be significantly enhanced. " The person in charge of the Chongqing Municipal Bureau of Land and Housing Management said.

  "Resolutely hold accountable those who abuse their powers and neglect their duties."

  "Illegal behavior of real estate development enterprises" is one of the focuses of this special action. On July 31, the Ministry of Housing and Urban-Rural Development announced a list of 20 illegal real estate development enterprises and intermediaries investigated and dealt with in various places, involving Beijing, Guangzhou, Tianjin, Chongqing, Changsha, Xi ‘an and Jilin. This is the first public exposure after the document "Special rectification of chaos in the property market" was issued.

  According to the Ministry of Housing and Urban-Rural Development, these real estate development enterprises and intermediaries are involved in illegal activities such as price gouging, property hoarding, unapproved sales and false propaganda.

  It is worth mentioning that the documents issued by the Ministry of Housing and Urban-Rural Development are clear:"To carry out rectification actions ineffective, people complain more, and the real estate market has serious violations of laws and regulations, it is necessary to intensify supervision. Departments and personnel suspected of concealing, abusing their powers and neglecting their duties must be resolutely accountable. "

  The seven ministries and commissions of "housing, living and not speculating" require 30 cities to act first.

  The full name of the document issued at the end of June is "Notice on Launching Special Actions in Some Cities to Combat Illegal Acts against the Interests of the Masses and Control the Chaos in the Real Estate Market". This notice jointly issued by seven ministries decided to launch special actions in 30 cities from the beginning of July to the end of December this year. The focus of remediation mainly includes four types of behaviors, namelySpeculative real estate speculation, real estate "black intermediary", illegal real estate development enterprises and false real estate advertisements.

  In addition, five kinds of false real estate advertisements, such as fabricating, spreading false information, or misinterpreting relevant real estate policies, are listed.

  The above-mentioned document also lists the "list of cities to carry out special actions first": Beijing, Shanghai, Guangzhou, Shenzhen, Tianjin, Nanjing, Suzhou, Wuxi, Hangzhou, Hefei, Fuzhou, Xiamen, Jinan, Zhengzhou, Wuhan, Chengdu, Changsha, Chongqing, Xi ‘an, Kunming, Foshan, Xuzhou, Taiyuan, Haikou, Ningbo, Yichang and Harbin.

  In May, the Ministry of Housing and Urban-Rural Development interviewed the heads of 12 cities including Xi ‘an, Haikou, Sanya, Changchun, Harbin, Kunming, Dalian, Guiyang, Xuzhou, Foshan, Chengdu and Taiyuan. In August, the Ministry of Housing and Urban-Rural Development also talked about the main leaders of Haikou, Sanya, Yantai, Yichang and Yangzhou. These interviewed cities, except Sanya, Dalian, Yantai and Yangzhou, are all on the list of this special action. Of course, the focus of the interview is different, but the starting point is the same, "housing is not speculation." (CCTV News Comprehensive Beijing Youth Daily)

Shao Shiyu, a women’s football player from Beijing Normal University, was elected as the best player in the FISU Football World Cup.

Shao Shiyu sent a message to celebrate Beijing Normal University’s championship. Shao Shiyu Weibo screenshot

The Beijing News On October 31, 2023, the women’s football team of Beijing Normal University scored 7-6 (penalty shootout 5-4) to win the FIFA World Cup.

Shao Shiyu, a women’s football player from Beijing Normal University, was elected as the best player in the competition. On November 1st, Shao Shiyu posted a message on social media to celebrate, "The champion belongs to us and may be late, but he will never be absent. I want both the champion and the MVP. " Shao Shiyu, born in 2000, is a midfielder and now plays for the women’s football team of Hangzhou Bank, a newly promoted female super player.

At the end of July this year, Shao Shiyu won the third place in the Women’s Football Association Cup with Zhejiang Women’s Football Team. Figure/Shao Shiyu Weibo

Editor Wang Chunqiu

Western media: rudiger was angry and failed to start & pre-match training was full of anger and his teammates were surprised.

Live on May 20th, according to the news in the western media "relevo", Real Madrid coach Carlo Ancelotti chose to substitute rudiger in the second round against Manchester City, which surprised the whole team and made the players very angry.

Rudiger restrained Harland in the first leg against Manchester City, and An Shuai also publicly announced that rudiger would start. According to the media, because of this, when An Shuai changed his mind to let rudiger substitute, the German central defender felt a little unacceptable. Rudiger himself and his teammates were surprised.

In the competition, rudiger’s body language has spoken for itself. Real Madrid also predicted that rudiger would start, Alaba would be left-back, Cammavinga would reinforce the midfield and Rodrigo would be on standby.

After determining the starting lineup, rudiger was once very depressed, and several teammates tried to comfort and encourage the angry central defender. As a matter of fact, rudiger was full of anger during pre-match training, as if playing a top-level race, constantly seeking physical confrontation.

However, in the case of 0-2 backwardness, it is intriguing for An Shuai to replace modric with rudiger. It is obviously illogical for the central defender to change the midfield. The Real Madrid team thinks that this is an act of compensation by An Shuai to appease rudiger.

After the game, Galeries Lafayette also came to the dressing room, trying to boost the morale of the team, and also appeased rudiger a little. According to the media, An Shuai always prefers the central defender combination of Militao and Alaba.

Popular "CHAGPT" and the prospect of AI

1. what is chagpt?

It is a natural language model GPT (Generative Pre-trained Transformer) released by OpenAI a few years ago. The principle of GPT is: first, provide it with a huge corpus (directly grabbed from the Internet), and let the model break up, mark and learn these texts through hundreds of billions (175 billion) parameters to build a complex prediction model; Then, according to this prediction model, it is judged which word a word should take in this situation. In this way, one word is strung together to form a paragraph or an article.

Its core is: building GTP model (structure)-model pre-training and self-learning to build internal feedback (motivation)-Chat is to build a friendly user interface and interactive way to realize external feedback (interactive layer).

2. What can chatgpt do now?

A, answer questions; Chatgpt’s actual expression ability is better than many people; Because of the "breadth of self-learning", the content it answers can often give the questioner a new angle or a perfect framework;

B, write an article; Also based on the "breadth of feeding", we can give quality results such as emails, reports, papers, planning schemes, etc.

C, summarizing and refining; Can help you listen to videos, podcasts, articles, etc., and summarize the main points in concise language;

D, generating codes; Also based on "feeding professionalism", its code generation ability is also very strong;

3. Disadvantages of chatgpt:

A, the level of input information: ChatGPT can’t generate information out of thin air, and all its knowledge can only come from the corpus it is fed. Obviously, the answers it can provide and the contents it can output will not exceed the average level of these corpora; It is essentially a kind of second-hand information. It is neither accurate nor traceable.

B, moral and ethical issues: under the current modeling conditions, there are negative and "deviation" phenomena;

C, the answer error rate is high (about 5%): it is difficult for us to see where the answer given by ChatGPT is wrong, which will lead to potential risks to users;

4. the prospect of chatgpt:

A. Search: Looking back at people’s search for information, in the search 1.0 stage, they can only go to the library to look up information; Search 2.0 stage

Information is digitized, and information can be queried and exchanged through the Internet; However, the information is too complicated and needs to be effectively screened, refined and integrated, which is the search 3.0 stage; It solves the contradiction between "too much information" and "too little attention"

B. Reading: In the future, each of us may have our own "exclusive doctor, lawyer, financial manager", etc. No matter what questions we want to consult, ask artificial intelligence directly, and it will give the latest, most comprehensive and accurate answer;

C. Writing: We no longer need to spend a lot of energy on writing plans and documents. We just need to think and come up with all kinds of ideas, themes, ideas, etc., and then tell these ideas to artificial intelligence, give it enough information, and it can be automatically output.

5. Future prospects of AI:

A. The future of AI will become the same infrastructure as water and electricity; Just as the first industrial revolution harnessed coal, the second industrial revolution harnessed oil, electricity and the third industrial revolution harnessed information; The next revolution will be to control "data and computing power", and the future intelligence will become the most basic facilities and mass goods of the whole society.

B. For individuals, AI may not make you unemployed, but those who will use AI in the future will make you unemployed. That is to say, if employees can’t strive to upgrade to High Concept (high concept, responsible for deep thinking) or High Touch (high experience, responsible for interpersonal interface), they will be gradually eliminated.

Renew the contract at the same time! Poole is 140 million in 4 years, Wiggins is 109 million in 4 years, and next year, the salary of Warriors will break 500 million!

On October 16th, Beijing time, according to the latest report of the NBA’s famous Woshen, Golden State Warriors reached a contract renewal agreement with Poole and Wiggins at the same time. Poole signed a four-year contract of $140 million, while Wiggins significantly reduced his salary and signed a four-year contract of $109 million. Golden State Warriors spent $249 million to keep Poole and Wiggins at the same time, which is undoubtedly a huge surprise for Golden State Warriors’ road to championship in the next few years!

After the news of the famous God Woshen broke the news, according to several ESPN sources, Golden State Warriors and Jordan Poole formally reached a four-year and $140 million early contract renewal agreement. The guaranteed amount of the contract is USD 123 million, with an incentive clause. After the incentive clause is completed, the contract amount can be expanded to 140 million.

Jordan Poole was selected by Golden State Warriors with the 28th overall pick in the first round of the 2019 draft, and then signed a four-year, $10.09 million rookie contract with the Warriors. At present, there is one year left in the rookie contract, which is worth $3.9 million. The new contract will not take effect until the 2023-24 season. 2? In the 2001-22 regular season, Poole played 30 minutes per game with 18.5 points, 3.4 rebounds, 4 assists and 0.8 steals. In the playoffs, he played 27.5 minutes per game with 17.0 points, 2.8 rebounds, 3.8 assists and 0.8 steals.

Subsequently, the American media StatMuse exposed a set of data, ranking the top six in the average annual salary of 2019 rookie’s early contract renewal, and Morant, Zion and Garland’s average annual salary was $38.86 million, which tied for the top three. Poole’s average annual salary after renewal is as high as $35 million, ranking fourth, followed by Hiro’s average annual salary of $30 million and Barrett’s average annual salary of $26.79 million.

At the same time, after Poole’s 4-year contract extension of $140 million, Golden State Warriors will have four players with annual salary exceeding $28 million in 2023-24 season, and these four players are rookies cultivated by Golden State Warriors themselves: Curry’s annual salary is $52 million, Clay’s annual salary is $43 million, Poole’s annual salary is $35 million, and Chasing Dreams Green’s annual salary is $28 million. The success rate of rookie like Golden State can be said to be the only one in the league.

In addition, according to the famous story of God Wo, Golden State Warriors renewed their contract with All-Star Wiggins for four years, with a contract value of 109 million dollars. Wiggins will be tied with Golden State Warriors for five years, with a total contract value of 143 million dollars. Mouth Wiggins earned $33.6 million this season. The salary of the new contract will be reduced to $24.3 million in the first year and $26.3 million in the second year. Golden State Warriors gave Mouth Wiggins the option in the last year.

Kou Wiggins was the No.1 draft pick in 2014. On the day he was selected, he was traded to Timberwolves by Cavaliers. He stayed there for six years until he was traded to Golden State Warriors in 2020. In the 2021-22 season, Wiggins played the masterpiece of his career, averaging 17.2 points, 4.5 rebounds and 2.2 assists per game. He was selected as an NBA All-Star for the first time.

Wiggins’ performance in the playoffs was even more amazing, averaging 16.5 points, 7.5 rebounds and 1.8 assists per game, with a shooting percentage of 46.9%, a 3-point shooting percentage of 33.3% and a free throw percentage of 64.6%. His performance was comprehensive and stable. Wiggins’ total positive and negative value in the playoffs is as high as +140, which is superior to all playoff players, even higher than Curry, ranking first in the league!

After learning that Poole renewed the Golden State Warriors for $140 million in four years, many experts and fans thought Wiggins would leave, but Wiggins chose to reduce his salary by nearly $10 million a year and renew the Golden State Warriors. We have to sigh, Wiggins is sure to be true love to Golden State Warriors, but Golden State Warriors are like many media descriptions to Wiggins, like breaking a bone and getting a big bargain!

In the past season, Poole and Wiggins both played the most time in Golden State Warriors, Wiggins played 2,329 minutes, Poole played 2,283 minutes, which shows their importance to Golden State Warriors. Golden State Warriors stayed with $249 million. Wiggins, 27, and Poole, 23, when Curry, Clay, and Dream Chasing are all getting old, the successors of Golden State Warriors, have quietly taken their place.

The Golden State Warriors dropped $249 million and renewed Poole and Wiggins at the same time. We also have to admire the courage of Lakob, the owner of Golden State Warriors. Because, according to the analysis of salary expert Bobby Marks, if Dream Pursuit chooses to implement the option of 27.6 million players in 23-24 season, the total salary of 12 players in Golden State Warriors in 23-24 season will reach 215 million, and the luxury tax will reach 268 million, totaling 483 million. Once there are 14 full players, the total salary and luxury tax will probably exceed 500 million dollars.

Marcus Thompson II, the team reporter of Golden State, published the salary details of Golden State Warriors in the 23-24 season, which confirmed the above statement: Curry 51.9 million, Clay 43.2 million, Poole 28 million (estimated), dream-chasing: 27.6 million (if the player option is implemented), Wiggins 24.3 million, Wiseman 12.1 million, Rooney 7.5 million and Kuminga 60.

If the 14-member roster is completed, the luxury tax that Golden State Warriors will have to pay in 2023-2024 will exceed $275 million, which is higher than the combined salaries of Knicks and Grizzlies this year. As we all know, Lakob, the owner of Golden State Warriors, only spent 450 million dollars when he acquired Golden State Warriors in 2010. The total salary next year will exceed the total value of the team that year. Lakob is really rich and willful!

After renewing Poole and Wiggins at the same time, the salary space of Golden State Warriors can be said to be an unprecedented explosion! What about the next dream catcher Green who is facing a contract renewal? Referring to the first year after the renewal of the contract, the annual salary of Brother Wilkins will be reduced to 24.3 million USD. Dreamcatcher Green must reduce his salary if he wants to stay in Golden State for a long time!

I put the essence of Python coroutine Pa was clean!

This article is a large amount of information, from IO multiplexing, to use the generator, then async, await realization of the principle behind it, in simple terms, the analysis was very thorough, very hardcore!

Two days for personal reasons because it did not touch a long time to write a point of Python, which involves "coroutine" program, the last time out, it is Web framework tornado unique feature, now we have async, await keyword support . Thought about its implementation, reviews the evolution of these years, feel a little bit mean.

They are single-threaded, why the original code with the low efficiency of the async, await add some asynchronous library becomes higher efficiency?

They are single-threaded, why the original code with the low efficiency of the async, await add some asynchronous library becomes higher efficiency?

If you do Python-based network or Web development, this question has puzzled, this article attempts to give an answer.

Before beginning 0x00

Firstly, Not take you browse the source codeAnd then tell you the control to achieve the original code Python standard. Instead, we will set out from the real problems, think of solutions to the problem, step by step evolution path experience solutions, and most importantly, hoping to gain knowledge in a systematic upgrade process.

This article only provides an independent direction of thinking, does not follow the historical and current actual implementation details.

Secondly, you need to read this article familiar with Python, at least understand the concept generator generator of Python.

0x01 IO multiplexing

This is the key to performance. But we are here only to explain the concept, its implementation details is not the point, which we understand Python coroutine enough, as already know enough about, advances to 0x02.

First, you want to know all the network service program is a huge loop, your business logic can be called at some point in this cycle:

defhandler (request):

WHILETRUE:

# Get a new request

request=accept

# To get users to write business logic function according to the route map

Handler=GET_HANDLER (Request)

Handler (Request)

Imagine your Web service of a handler, after receiving a request requires a response to the results of API calls.

For the most traditional network applications, your API requests issued to wait for a response after this time the program stops running, even new requests have to get in after the end of the response. If you rely on an API request packet loss seriously, especially in response to slow it? That will be very low throughput applications.

Many traditional Web server using multi-threading technology to solve this problem: the run handler is placed on other threads, each dealing with a request, this does not affect the new thread blocks request to enter. This problem can be solved to some extent, but for larger systems concurrent, multithreaded scheduling will bring significant performance overhead.

IO multiplexing can be done to solve the problem without the use of threads, it is provided by the operating system kernel functions, we can say specifically for this type of scenario for us. Simply put, your program encounters network IO, tells the operating system to help you staring at, while the operating system gives you a way to make you can feel free to get what IO operation has been completed. like this:

# # 操作 系统 复 复 示 示 例 代代

# Register the ID and type of IO operations to the operating system IO

IO_REGISTER (IO_ID, IO_TYPE)

# Get completed IO operations

Events=IO_GET_FINISHED

For (IO_ID, IO_TYPE) INEvents:

IFIO_TYPE==Read:

Data=read_data (IO_ID)

Elifio_Type==Write:

Write_data (IO_ID, DATA)

Gring the IO multiplex logic into our server, probably like this:

Call_backs={}

Defhandler (REQ):

# do jobs here

DefCall_back (Result):

# Use the returned Result to complete the remaining work …

Call_backs [IO_ID]=CALL_BACK

# New cycle

WHILETRUE:

# Get the completed IO event

IFIO_TYPE==Read: # read

Data=read (IO_ID)

Call_back=call_backs [io_id]

Call_back (data)

Else:

# Other types of IO event processing

PASS

# Get a new request

Handler (Request)

Our Handler has returned immediately for the IO operation. At the same time, each iteration will perform a callback over the completed IO, the network request no longer blocks the entire server.

The pseudo code above is only for understanding, and the details are more complicated. Moreover, it is also possible to connect the new request to the IO event from the operating system to the monitor port.

If we split the cycle part with a call_backs dictionary to a separate module, we can get an EventLoop, which is the iOLOOP provided in the Python Standard Library Asynci.

0x02 with generator to eliminate Callback

He focuses on the Handler function written in our business, after having independent iOLOOP, it now becomes like this:

# 业 业 代 代 … …

# Need an API request

Print (Result)

ask_LOOP.GET_EVENT_LOOP.IO_CALL (API, CALL_BACK)

Here, performance problems have been resolved: We no longer need multi-threads to constantly accept new requests in the source, and don’t have to rely on the API response.

But we have also introduced a new problem. The original business logic code is now demolished. The code before requesting the API is still normal. The code after the request API can only be written in the callback function.

Here our business logic has only one API call. If there are multiple APIs, plus the call to Redis or MySQL (their essential is also a network request), the entire logic will be split, this is a burden on business development .

For some languages ??with anonymous functions (right is Java), it may also trigger a so-called "turning hell".

Next, we find way to solve this problem.

We can easily think that if the function can be suspended after running to the network IO operation, it will wake up at the breakpoint after completion.

If you are familiar with Python’s "Builder", you should find that it happens to have this feature:

Defexample:

Value=yield2

Print ("Get", Value)

ReturnValue

g=esample

# 启 启 生器, we will get 2

Got=G.send (NONE)

Print (got) # 2

TRY:

# Anti-start will display "get 4", which is our incoming value

Got=g.send (got * 2)

ExceptStopItemization ASE:

# Builder runs, will print (4), E.Value is the value of generator return

Print (E.Value)

There is Yield keyword in the function, and the call function will get a generator, and a key method for generator can interact with the generator.

G.send (none) runs the generator code until you encounter Yield, and return to the object, that is, 2, the generator code is stopped here until we perform G.send (got * 2) again, The 2 * 2 is also 4 to assign the value Value in front of Yield, and then continue to run the generator code.

Yield is like a door, you can send a thing from here, you can also take another thing.

If Send makes the generator to run until the next yield is over, the Send call will trigger a special exception STOPITERATION, which comes with a property Value, which is the value of the generator Return.

If we convert our Handler to a generator with Yield keyword, run it to The specific content of IO operationReturns, put the IO result back and restore the generator to run, then solve the problem of uncomfortable business code:

# 业 业 代 代 … …

# Need to execute an API request, directly put the IO request information yield

Result=yieldio_info

# Use the result returned by the API to complete the remaining work

Print (Result)

# This function is registered in iOLOOP, used to call back when there is a new request

Defon_Request (request):

Handler=GET_HANDLER (Request)

g=Handler (Request)

# 首 首 启 获得 获得 i 获得

IO_INFO=G.send (none)

g.send (Result)

ask_LOOP.GET_EVENT_LOOP.IO_CALL (IO_INFO, CALL_BACK)

The above example, the Handler code written by the user will not be dispersed into the callback, and the ON_Request function interacts with Callback and IOLOOP, but it will be implemented in the web framework, which is not visible to the user.

The above code is enough to give us inspiration of Callback destroyed with the builder, but there are two points:

  1. Only a network IO is initiated in business logic, but it is often more

  2. Business logic does not call other asynchronous functions (helping), but in practice, we tend to call other levels.

Let’s take a more complex example:

Among them, Request executes real IO, FUNC1, FUNC2 is only called. Obviously our code can only be written:

Deffunc1:

Ret=yieldfunc2 (re)

returnret

Deffunc2 (DATA):

ReturnResult

DEFREQUEST (URL):

# This simulation returns an IO operation, contains all information about the IO operation, where the string is simplified

Result=yield "IOJOB OF% S"% URL

ReturnResult

For Request, we expose the IO operation to the framework through Yield.

for Func1 and func2, calling request, clearly add Yield keywords Otherwise, the request call returns a generator and will not be paused and continue to perform subsequent logic obviously errors.

This is basically that we don’t write asynchronous code in the Tornado framework without Yield from, Aysnc, AWAIT.

To run the entire calling stack, the approximate process is as follows:

  1. Call FUNC1 to get the generator

  2. Call Send (None) Start it gets the result of request ("http://test.com/foo"), or generator object

  3. Send (none) Starts the generator generated by the request, gets the IO operation, registered by the frame to IOLOOP and specify a callback

  4. The Request Builder wakes up in the callback function after IO, and the generator will go to the return statement end

  5. Capture an exception to get the return value of the Request Builder, wake up the last layer of FUNC1, and get a FUNC2 generator

  6. Continue to execute …

Call FUNC1 to get the generator

Call Send (None) Start it gets the result of request ("http://test.com/foo"), or generator object

Send (none) Starts the generator generated by the request, gets the IO operation, registered by the frame to IOLOOP and specify a callback

The Request Builder wakes up in the callback function after IO, and the generator will go to the return statement end

Capture an exception to get the return value of the Request Builder, wake up the last layer of FUNC1, and get a FUNC2 generator

Continue to execute …

Friends who are familiar with the algorithm and data structure encounter such a traversal logic that will be returned, can be recursively used, because the recursive use generator can not do it, we can use the stack, in fact, this is the word "call stack" origin.

With the stack, we can Connect all generators connected in series in the entire call chain to a generatorFor its constant Send, you can continue to get all IO operation information and drive the call chain advancement, and the implementation method is as follows:

  1. The first generator is in the stack

  2. Call the Send, if you get the generator, you will enter the next round iteration

  3. I encountered IO to ask Yield, let the frame sign up to iOLOOP

  4. After the IO operation is completed, the cache result is forth, enter the next round iteration, the purpose is to restore the upper function using IO results.

  5. If a generator is running, you also need to restore the upper function to the upper function.

The first generator is in the stack

Call the Send, if you get the generator, you will enter the next round iteration

I encountered IO to ask Yield, let the frame sign up to iOLOOP

After the IO operation is completed, the cache result is forth, enter the next round iteration, the purpose is to restore the upper function using IO results.

If a generator is running, you also need to restore the upper function to the upper function.

If implemented, the code is not long but the amount of information is relatively large.

It turns the entire call chain to a generator, calling the send, to complete the IO in the chain, complete these IO, continue to push the logic execution in the calling chain until the overall logic ends:

DEFWrapper (GEN):

# The first layer calls the stack

Stack=stack

Stack.push (gen)

# Start a layer-by-layer call

WHILETRUE:

# Get the top elements of the stack

item=stack.peak

Result=none

IFisgenerator (item):

TRY:

# Try to get the next layer call and get it in the stack

Child=item.send (Result)

Stack.push (child)

# Result Restore to NONE

Result=none

# After entering the stack, enter the next loop directly, continue to explore down

Continue

# If you have an end, you will temporarily save the Result, the next step to make yourself out.

Result=E.Value

Else: # o o operation

# # I 操作 操作, Yield, Io will be woken up and temporarily saved after IO

Result=yieldItem

# 走 到 here, this layer has been completed, out of the stack, the next iteration will be a layer of calling chain

Stack.pop

# 没有有 上, the entire call chain is completed, return

Ifstack.empty:

Print ("finished")

ReturnResult

This may be the most complicated part. If you look hard, it is actually as long as you understand that for the call chain in the example above, it can achieve the effect as follows:

W=Wrapper (Func1)

# Will get "IOJOB of http://test.com/foo"

W.send (none)

# 上 上 ojob foo completed the result "bar" incompart, continue to run, get "IOJOB OF http://test.com/bar"

W.send ("bar")

# 上 上 i i b 完成 完成 传 传 传 传 入 入 入 入 入 入 入 入 入 入 入 入 入

W.send ("BARZ")

With this part, the frame will be added to the matching code:

# Maintain a list of ready lists, store all completed IO events, format is (Wrapper, Result)

Ready=

# After using the wrapper package, you can process IO by Send.

g=wrapper (func1)

# Take the start state directly as the result of NONE

Ready.Append ((g, none))

# Let the iOLOOP perform this function each cycle to handle the ready for IO

Ready.Append ((g, result))

# Traversing all already generators, advance it down

Forg, Result InselF.Ready:

# Use the Result to wake the builder and get the next IO operation

IO_JOB=G.send (Result)

# After the IO operation is complete, add the generator to the ready list, wait for the next round of processing.

ask_LOOP.GET_EVENT_LOOP.IO_CALL (

IO_JOB, LambdareSult: Ready.Append ((g, result)

Here, the core idea is to maintain a list of ready-to-read, and IOLOOP is overwhelmed, and the generator that promotes the ready state is run down, and the new IO operation is registered. After the IO is completed, the ready, after several rounds of Ioloop iteration A Handler will eventually be executed.

At this point, we use the generator to write to write business logic to run normally.

0x04 Improved Scalability

If you can read it here, Python’s scope is basically clear.

We have already achieved one Miniature sweeping frameworkThe realization details of the standard library look great here, but the specific ideas are consistent.

Our equilation framework has a restriction, we can only use IO to operate asynchronously, although in the world of network programming and web programming, the block is basically only IO operation, but there are some exceptions, such as I want the current operation Sleep for a few seconds. The use of time.sleep will make the entire thread to block, requiring special implementation. For example, some CPU-intensive operations can be asynchronously through multi-threaded asynchronous, so that another thread notification event has been completed and followed.

Therefore, it is best to decouple an open space with the network, so that the network IO is only one of the scenes, improves the scalability.

The Python official solution is to let the user hand to block the block code. As for the IOLOOP to register IO event or open a thread completely by yourself, and provide a standard "placeholder" FUTURE, indicating that his results wait for the future Yes, some prototypes are as follows:

ClassFuture:

# Set the result

Defset_Result (Result): Pass

# 获取 结果 结果

Defresult: Pass

# 表示 表示 This Future object is not already set up.

Defdone: Pass

# Set the callback function that should be executed when he is set, you can set multiple

Defadd_done_callback (Callback): Pass

Our slight change can support Future, making the scalability stronger. Network request functions for user code:

# 现在 r es es,, 生 生 器 器 器 器 器 器 器 器

#future is understood as a placeholder

Fut=future

Defcallback (Result):

# Assign the placeholder when the network IO completed the callback

Fut.set_Result (Result)

ask_LOOP.GET_EVENT_LOOP.IO_CALL (URL, CALLBACK)

Now, Request is no longer a generator, but directly returns Future.

And for the function of processing the ready list in the frame:

DEFCALLBACK (FUT):

#future is set to be placed in the ready list

Ready.Append ((g, fut.result))

Fut=g.send (Result)

Fut.add_done_callback (callback)

0x05 development and change

Many years ago, when using Tornado, probably only one Yield keyword is available, the sweeper wants to achieve, that is, this idea, even Yield keywords and return keywords can not appear in a function, you want to run after the generator Returns a value, you need to manually Raise an exception, although the effect is the same as Return now, but it is still very awkward, not elegant.

Later, there was Yield from expression. What can it do?

It is popular, it is done what the generator Wrapper is doing the above: Calling link through the stack, it is the syntax of the Wrapper logic.

With it, the same example you can write:

Deffunc1:

# Note Yield from

Ret=yieldFromRequest ("http://test.com/foo")

# Note Yield from

Ret=yieldfromfunc2 (re)

returnret

Deffunc2 (DATA):

# Note Yield from

Result=yieldfromRequest ("http://test.com/"+data)

ReturnResult

# 同 上 上 实 实 实 实 实 r

Then you no longer need the brainless Wrapper function:

g=func1

# Return the first request for Future

g.send (none)

# Continue to run, automatically enter FUNC2 and get the FUTURE inside it

G.send ("bar")

# Continue to run, complete the residual logic of the call chain, throw the stopiteration exception

G.send ("BARZ")

Yield from the entire call chain directly, it is already great, but it is used asynchronous programming or otherwise, and other languages ??have special-top Async, the AWAIT keyword, until the later version puts these content With dedicated Async, AWAIT keyword packaging, it is a more elegant look today.

0x06 summary and comparison

Overall, Python’s native and trip is achieved from two aspects:

  1. Based on IO multiplexing technology, the entire application is non-blocking on IO, achieving high efficiency

  2. Change the dispersed Callback code through the generator into synchronous code, reducing business writing difficulties

Based on IO multiplexing technology, the entire application is non-blocking on IO, achieving high efficiency

Change the dispersed Callback code through the generator into synchronous code, reducing business writing difficulties

There is a language of the object of the generator. Its IO fight is achieved, the evolution of the Java fight is basically exactly, the keyword is the same, and the Future class is the same than the promise.

However, it is different for this, which is different from this sweeping with the degree of GO-named GO, and does not explicitly based on the generator.

If the class ratio, you can implement the geventime of Python, which is the runtime, and Patch off the system calls to access your own Runtime, you come to the scheduling sweeper, gevent is focused on the network, based on network IO scheduling, relatively simple, The GO achieves perfect multi-core support, more complex and perfect, and creates a new CHANNEL new programming paradigm.

Author: Mao bean peanut

Getting Started: The Most Complete Zero-Basic Python Problem | Zero-Based 8 Months Python | Battle Project | Learning Python is this shortcut

Dry goods: crawling Douban short comment, movie "later we" | 38 years old NBA best player analysis | From Wanzhong to Word! Tang Dynasty 3 disappointment | Laughing to see the new Eti Dragon Slay Dollar | Running Question King | Make a massive Miss in Python Sketch | Disc, I am so fire, I use machine to learn to be a mini recommended system movie

Fun: Poultry Game | Nine Mao Hai | Beautiful Flower | Two-Article Python "Everyday Cool" game!

AI: Robot that will be poetry | Give the picture color | predictive income | Solver, I use the machine to learn to be a mini recommended system movie

Gadget: PDF to Word, easy to get forms and watermarks! | One button saves the HTML page as PDF! Goodbye PDF to extract charges! Use 90 lines of code to create the strongest PDF converter, Word, PPT, Excel, Markdown, HTML one-to-date conversion | Make a staple low-cost ticket prompt! | 60 lines of code made a voice wallpaper switch every day to see a little sister! |

Annual explosion case

  • 1). Lying! PDF to Word Use Python to easily get it!
  • 2) Learn Python is really fragrant! I made a website with 100 lines of code, helping people PS travel pictures, earn a chicken leg to eat
  • 3). The first broadcast over 100 million, hot all net, I analyzed the "Sister Taking Wind and Waves" and found these secrets
  • 4) 80 lines of code! Do a Dream in Python with Python
  • 5). You must master the 20 Python code, short and delicate, useless
  • 6). 30 python hambo skills
  • 7). I summarized 80 "rookie Python selection dry goods.pdf", all dry goods
  • 8). Goodbye Python! I want to learn Go! 2500 word depth analysis!
  • 9). Find a dog welfare! This Python reptile artifact is too cool, automatically download the girl picture